UICollectionViewCells не отображается в UICollectionView

Как UICollectionView названия, у меня есть UICollectionView который UICollectionView к UIViewController через IB. У меня есть UICollectionView подкласс под названием imageCell. В методе viewcontroller viewDidLoad я регистрирую класс следующим образом:

CGRect collectionViewRect = CGRectMake(384, 60, 728, 924);
UICollectionViewFlowLayout *flow = [[UICollectionViewFlowLayout alloc] init];
imageCollectionView = [[UICollectionView alloc] initWithFrame:collectionViewRect collectionViewLayout:flow];
[imageCollectionView registerClass:[imageCell class] forCellWithReuseIdentifier:@"Cell"];
imageCollectionView.delegate = self;
imageCollectionView.dataSource = self;

Затем я вызываю метод под названием getPhotos в viewDidAppear (для целей пользовательского интерфейса), который получает фотографии из службы, а затем я вызываю [imagCcollectionView reloadData]; внутри getPhotos.

Затем в cellForItemAtIndexPath я делаю следующее:

imageCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
GRKAlbum *album = [albums objectAtIndex:indexPath.item];
cell.titleLabel.text = album.name;
return cell;

Я знаю, что я не делаю ничего плохого здесь, потому что метод вызывается, а cell не nil и ни один album.

Итак, когда я запускаю весь этот код, появляется UICollectionView, но в нем ничего нет. Все, что я вижу, это цвет фона collectionView. Любая помощь вообще была бы весьма признательна.

Примечание. Я НЕ создал XIB для класса imageCell когда я его создал, и я использую Storiesboards.

Ответ 1

Есть несколько способов отладить эту ситуацию.

  1. Зарегистрируйте класс UICollectionViewCell вместо вашего customCell и установите цвет фона ячейки в cellForItem...

  2. Если ячейки появляются на шаге 1, попробуйте использовать свой собственный класс ячеек и установите его фон

Вы используете раскадровку? тогда..

Вам не нужно регистрировать какую-либо ячейку для просмотра коллекции. Вы можете использовать ячейку прототипа, просто укажите правильный идентификатор ячейки. Вы можете проектировать все в своей ячейке прототипа. Пользовательский класс может не понадобиться во всех случаях.

Ответ 2

Если вы создали ячейку в раскадровке, просто удалите оператор класса регистров. Вам не нужно регистрировать что-либо (для просмотра коллекции или табличного представления), если вы делаете ячейку в раскадровке (на самом деле, она закручивает вещи, если вы это сделаете). Единственное, что вам нужно сделать, это убедиться, что вы установили идентификатор в IB.

Ответ 3

У меня была та же проблема, что и при замене обычной линии registercell линии на следующую строку

[self.collection registerNib:[UINib nibWithNibName:@"nibname" bundle:nil] forCellWithReuseIdentifier:identifier];

Ответ 4

Вы создаете новый вид коллекции в своем коде, но не добавляете представление на экран. Вы говорите, что вы уже используете раскадровки, полагаю, вы видите, что вы видите коллекцию из вашей раскадровки, которая предположительно не связана с источником данных или делегатом? Либо это, либо вы не вызываете перезагрузку в правом представлении коллекции.

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

Ответ 5

Я сделал это с помощью раскадровки Xcode 6.2. Надеюсь, поможет

#import <UIKit/UIKit.h>

@interface InfoSecurity : UIViewController
@property (strong, nonatomic) IBOutlet UICollectionView *tabsCV;

@end

.m
**************

#import "InfoSecurity.h"
#import "TabsCell.h"

@interface InfoSecurity ()<UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>

@end

@implementation InfoSecurity

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    [self.tabsCV registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"TabsCell"];

}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return 03;
}
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
    return 01;
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(90, 50);
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *reuseIdentifier = @"tabscellID";


    TabsCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];

    cell.TabTitleLabel.text= @"OPTIONS";

    return cell;

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

Ответ 6

Я почувствовал себя манекеном, когда понял, что мои камеры просмотра коллекции закрыты моей навигационной панелью. Sooo, убедитесь, что ваша панель навигации (если она у вас есть) не закрывает ячейки просмотра коллекции, с которыми вы тестируете.

Ответ 7

Иногда ячейка просмотра коллекции является черной (тот же цвет с фоном, невидимый, скрытый - нет), перезагрузка видимых ячеек - это работа.