Контроллер представления коллекции iOS 6 с несколькими динамическими ячейками

Я всего неделю в Xcode, пытаюсь чему-то научиться, поэтому могу внести свой вклад в проект.

До сих пор я изучал туториалы и кое-что сделал :) Но я далек от завершения. Я надеюсь, что кто-то поймет, что я буду спрашивать..

Я делаю приложение, которое будет брать данные с сервера, данные будут включать миниатюры изображений, изображения и текст. Прямо сейчас у меня есть контроллер представления коллекции с ячейкой с 3 кнопками (мне кажется, что их легче разместить в ячейке представления коллекции), фоном кнопки является определенное изображение (жестко запрограммированное на данный момент), и вам нужно контроллер представления, где отображается весь контент для этого элемента, ничего особенного :)

Но макет (дизайн) мне трудно добиться. В основном (насколько я понимаю) мне нужно иметь 4 ячейки представления коллекции с кнопками с разным расположением. Теперь у меня есть один контроллер представления коллекции с одним представлением коллекции, содержащим одну ячейку.

#import "CollectionViewController.h"
#import "CollectionViewCell.h"
#import "ImageDetailsViewController.h"
#import "StoryItem.h"

@interface CollectionViewController ()
{
    NSArray *arrBigLeft;
    NSArray *arrSmallTopR;
    NSArray *arrSmallBotR;
}

@end

@implementation CollectionViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{


    arrBigLeft = [[NSArray alloc]initWithObjects:@"[email protected]", @"[email protected]", @"[email protected]", @"[email protected]", nil];

    arrSmallTopR = [[NSArray alloc]initWithObjects:@"[email protected]", @"[email protected]", @"[email protected]", @"[email protected]", nil];

    arrSmallBotR = [[NSArray alloc]initWithObjects:@"[email protected]", @"[email protected]", @"[email protected]", @"[email protected]", nil];

    [super viewDidLoad];

    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

    if([segue.identifier isEqualToString:@"photoDetail1"]){
        CollectionViewCell *cell = (CollectionViewCell *)sender;
        NSIndexPath *indexPath = [self.collectionView indexPathForCell:cell];

        ImageDetailsViewController *idvc = (ImageDetailsViewController *)[segue destinationViewController];
        idvc.img = [UIImage imageNamed:[arrBigLeft objectAtIndex:indexPath.item]];

    }


    if([segue.identifier isEqualToString:@"photoDetail2"]){
        CollectionViewCell *cell = (CollectionViewCell *)sender;
        NSIndexPath *indexPath = [self.collectionView indexPathForCell:cell];

        ImageDetailsViewController *idvc = (ImageDetailsViewController *)[segue destinationViewController];
        idvc.img = [UIImage imageNamed:[arrSmallTopR objectAtIndex:indexPath.item]];

    }


    if([segue.identifier isEqualToString:@"photoDetail3"]){
        CollectionViewCell *cell = (CollectionViewCell *)sender;
        NSIndexPath *indexPath = [self.collectionView indexPathForCell:cell];
                ImageDetailsViewController *idvc = (ImageDetailsViewController *)[segue destinationViewController];
        idvc.img = [UIImage imageNamed:[arrSmallBotR objectAtIndex:indexPath.item]];

    }
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return [arrBigLeft count];
}



// The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

    static NSString *identifier=@"Cell";

    CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];

    [[cell button1]setBackgroundImage:[UIImage imageNamed:[arrBigLeft objectAtIndex:indexPath.item]] forState:UIControlStateNormal];

    [[cell button2]setBackgroundImage:[UIImage imageNamed:[arrSmallTopR objectAtIndex:indexPath.item]] forState:UIControlStateNormal];

    [[cell button3]setBackgroundImage:[UIImage imageNamed:[arrSmallBotR objectAtIndex:indexPath.item]] forState:UIControlStateNormal];

    return cell;
}


-(IBAction)returned:(UIStoryboardSegue *)segue {

}



@end

Это пока не работает так, как я хочу, но, по крайней мере, я получаю динамически создаваемые ячейки. Я хотел бы иметь возможность возвращать несколько ячеек с разными массивами элементов (изображений), и все они должны загружаться одновременно

снимок экрана

здесь вы можете видеть только две ячейки, но вторую я добавил только для того, чтобы визуализировать то, что я пытаюсь объяснить (4 разные ячейки). Первая ячейка (из-за количества изображений) повторяется 4 раза, когда я запускаю приложение, если Я собирался добавить те же изображения во вторую ячейку, я хотел бы, чтобы они были как на скриншоте, и чтобы в дальнейшем повторять в том порядке, который равен количеству изображений (длина массива)

Если вам нужно больше кода, дайте мне знать .. спасибо!


person Mite Stojanov    schedule 12.09.2013    source источник


Ответы (1)


Я предлагаю следовать этому, чтобы получить общее представление о том, что требуется.

http://www.raywenderlich.com/22324/beginning-uicollectionview-in-ios-6-part-12

Затем вы можете перейти к более сложным конструкциям. Похоже, вы прыгаете в глубокий конец. Но этот учебник действительно хорош.

person DogCoffee    schedule 14.09.2013
comment
Спасибо за урок, я вижу много вещей, которые вы можете сделать с collectionView. Я хорошо изучу его :) - person Mite Stojanov; 16.09.2013
comment
да, ищет классные вещи, которые вы можете сделать. Пожалуйста, отметьте как правильный, если вы довольны ответом. - person DogCoffee; 16.09.2013