UICollectionViewCells que no aparecen en UICollectionView

Como sugiere el título, tengo una UICollectionView conectada a un UIViewController través de IB. Tengo una subclass imageCell llamada imageCell . En el método viewcontroller viewDidLoad , logging la class de la siguiente manera:

 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; 

Luego llamo a un método llamado getPhotos en viewDidAppear (por razones de UI) que obtiene fotos de un service y luego [imagCcollectionView reloadData]; Dentro de getPhotos .

Luego en cellForItemAtIndexPath hago lo siguiente:

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

Sé que no estoy haciendo nada malo aquí porque se llama al método y la cell no es nil y tampoco lo es el album .

Entonces, cuando ejecuto todo este código, aparece UICollectionView , pero no hay nada en él. Todo lo que puedo ver es el color de background de la collectionView . Cualquier ayuda en absoluto sería muy apreciada.

Nota: NO creé un XIB para la class imageCell cuando lo hice y estoy usando Storyboards.

Existen algunas forms de depurar esta situación.

  1. Registre la class UICollectionViewCell en lugar de su customCell y configure el color de background de la celda en cellForItem...

  2. Si las celdas aparecen en el paso uno intenta usar tu propia class de celda y establece su background

¿Estás usando Storyboard? entonces..

No tiene que registrar ninguna celda para la vista de colección. Puede usar la celda prototipo, solo tiene que dar la identificación adecuada para la celda. Puede diseñar todo en su celda prototipo. Es posible que no se necesite una class personalizada en todos los casos.

Si creó la celda en el guión gráfico, simplemente elimine la instrucción de class de logging. No es necesario registrar nada (para una vista de colección o una vista de tabla) si crea una celda en un guión gráfico (de hecho, si lo hace, arruina las cosas). Lo único que debe hacer es asegurarse de configurar el identificador en IB.

Tuve el mismo problema solucionado con la sustitución de la línea de registercell convencional por debajo de la línea

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

Estás instanciando una nueva vista de colección en tu código, pero no estás agregando la vista a la pantalla. Dice que ya está utilizando storyboards, supongo que lo que puede ver es la vista de colección de su storyboard, que presumiblemente no está conectado a una fuente de datos o un delegado. O eso o no estás llamando a recargar en la vista de colección correcta.

Configura la vista de colección en el guión gráfico (y configura una salida para todo lo que se debe hacer en el código) o configúrala completamente en código. Por el momento creo que tienes dos vistas de colección.

Lo hice usando storyboard Xcode 6.2. Espero eso ayude

 #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. } 

Me sentí como un muñeco cuando me di count de que mi colección de celdas de vista estaba cubierta por mi barra de navigation. Entonces, asegúrate de que tu barra de navigation (si tienes una) no cubra las celdas de vista de la colección con las que estás probando.

A veces, la celda de vista de colección es negra (el mismo color con el background, invisible, oculto no), volver a cargar las celdas visibles es una solución.