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
Есть несколько способов отладить эту ситуацию.
-
Зарегистрируйте класс UICollectionViewCell вместо вашего customCell и установите цвет фона ячейки в cellForItem...
-
Если ячейки появляются на шаге 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
Иногда ячейка просмотра коллекции является черной (тот же цвет с фоном, невидимый, скрытый - нет), перезагрузка видимых ячеек - это работа.