2013-04-18 2 views
13

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

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 (по причинам UI), который получает фотографии из сервиса, а затем я называю [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, когда я его создал, и я использую раскадровки.

ответ

71

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

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

  2. Если клетки появляются на этапе одну попытку использовать свой собственный класс клеток и установить его фон

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

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

+0

Это не сработало ... – virindh

+0

См. Мое редактирование .... –

+9

спасибо большое .. это очень полезное решение. Я только что удалил [self.collectionView registerClass: [cutomCollectionCell class] forCellWithReuseIdentifier: @ "cutomCollectionCell"]; и ничего себе, он отлично работает. –

40

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

+3

Ответ помог :) –

+0

РегистрацияКласс: напортачил. :(:) –

+0

Это исправлено для меня. Кто-нибудь достаточно осведомлен, чтобы понять, почему он не только не работает так, но полностью заткнул его? – micnguyen

0

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

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

0

Я сделал это с помощью раскадровки 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. 
} 
+0

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

15

Я была такая же проблема, закрепленной заменив обычную registercell линии ниже линиями

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

Это помогло мне! Если у вас есть XIB для вашей ячейки, используйте этот метод. Я использовал auto complete, и я приземлился, используя registerClass: forCellWithReuseId: и это заставило мои представления не загружаться и, следовательно, не отображаться. – RPM

0

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

0

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

Смежные вопросы