uicollectionviewcontroller objective-c ios xcode ipad uicollectionview

objective c - uicollectionviewcontroller - UICollectionView cellForItemAtIndexPath que no registra la celda



uicollectionviewcell indexpath (5)

Intenta configurar un punto de interrupción en

[self.collectionView registerClass:[ImageCell class] forCellWithReuseIdentifier:@"MyCell"];

Supongo que su método loadView (¿Quiso decir viewDidLoad?) No se está llamando, por lo que la clase nunca se registra con el collectionView.

Estoy tratando de usar UICollectionViewCell , ya que todo lo que quiero mostrar es una imagen. Puedo agregar la imagen a la celda usando UIColor colorWithImage: en la propiedad contentView .

En mi método loadView , estoy registrando la celda de la siguiente manera: [self.collectionView registerClass:[ImageCell class] forCellWithReuseIdentifier:@"MyCell"];

Debajo está mi método de cellForItemAtIndexPath :

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath]; // cell customization return cell; }

Cuando lo ejecuto, tan pronto como llega a la línea de dequeue, se bloquea con el siguiente error:

*** Assertion failure in -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:] Terminating app due to uncaught exception ''NSInternalInconsistencyException'', reason: ''could not dequeue a view of kind: UICollectionElementKindCell with identifier MyCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard''

Me cansé de configurar una celda personalizada, y lo usé como clase y obtuve el mismo error. Mi celda personalizada subcultivada UICollectionViewCell y no tenía nada implementado, a excepción del initWithFrame predeterminado. Eso es porque solo quería cambiar el color de fondo de la vista. No estoy seguro de cuál es el problema, pero ¿podría alguien echar un vistazo a mi código y ayudarme? He estado tratando de resolver esto por un buen tiempo sin absolutamente nada de suerte.


Si está utilizando xib en la aplicación, agregue siguiente en su método viewdidLoad

[self.myCollectionView registerNib:[UINib nibWithNibName:@"CollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@"CellIdentifier"];

De lo contrario, si usa el guión gráfico, agregue el siguiente

[self.myCollectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"CellIdentifier"];

Finalmente agregue esto (si no)

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CellIdentifier" forIndexPath:indexPath]; return cell; }

La esperanza anterior ayudará.


Si solo desea mostrar una imagen, no necesita hacer ninguna subclasificación, puede establecer el backgroundColor la celda con colorWithPatternImage: Registra la clase así:

[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Cell"];

Entonces úsalo así:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath]; cell.backgroundColor = [UIColor colorWithPatternImage:[self.results objectAtIndex:indexPath.row]]; return cell; }

En este ejemplo, results es una array de UIImages .


establece tu nombre de identificador de celda como en código


si su vista de colección está conectada en el guión gráfico y el delegado y el origen de datos están establecidos allí, y proporciona los métodos necesarios para el origen de datos y el delegado, entonces agregar la llamada de registro hace que el

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath

devuelve un UICollectionView lugar de tu propia subclase. Así que haga cualquiera pero no ambos.