uicollectionviewcontroller tutorial collection ios objective-c uicollectionview uicollectionviewcell

ios - tutorial - Las propiedades UICollectionViewCell personalizadas son nulas después de dequeueing



uicollectionviewcell indexpath (2)

Así que tengo un UICollectionView y una celda personalizada y todo se muestra y funciona muy bien. Registré la clase en viewDidLoad:

myCollectionView = [[UICollectionView alloc] initWithFrame:collectionViewFrame collectionViewLayout:layout]; [myCollectionView setDataSource:self]; [myCollectionView setDelegate:self]; [myCollectionView setBackgroundColor:[UIColor myColor]]; [myCollectionView registerClass:[SBCustomCell class] forCellWithReuseIdentifier:@"Cell"];

En mi método cellForItemAtIndexPath dequeue la celda y establece sus propiedades y la devuelve:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { static NSString *identifier = @"Cell"; SBCustomCell *cell= [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath]; [cell setName: "My Name"]; cell.image = [UIImage imageNamed:@"lol.png"]; cell.score = 100.0; cell.backgroundColor=[UIColor whiteColor]; return cell; }

Todo esto funciona bien y aparece en la interfaz de usuario. Mi problema es cuando configuro un reconocedor de gestos en el collectionView, cuando presiono una celda determinada, quiero poder acceder a sus propiedades. Estoy tratando de hacerlo así:

-(void)handleLongPress:(UILongPressGestureRecognizer *)longPressRecognizer { CGPoint locationPoint = [longPressRecognizer locationInView:myCollectionView]; if (longPressRecognizer.state == UIGestureRecognizerStateBegan) { NSIndexPath *indexPathOfMovingCell = [myCollectionView indexPathForItemAtPoint:locationPoint]; SBCustomCell *cell= [myCollectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPathOfMovingCell]; NSLog(@"%@",cell.name);

Cuando intento acceder a cualquiera de las propiedades de mi celda personalizada, es (nulo) en la consola. ¿Porqué es eso? ¿Qué estoy haciendo mal?


Necesitas usar:

SBCustomCell* cell = (SBCustomCell*)[myCollectionView cellForItemAtIndexPath:indexPathOfMovingCell];

en lugar de:

SBCustomCell* cell = [myCollectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPathOfMovingCell];

Además, está utilizando SBSingleCandidateUnitView como el tipo de celda en lugar de su SBCustomCell .


Fue porque no estaba configurando mis propiedades correctamente. En mi archivo de encabezado necesito establecer una propiedad, también conocido como @property ... UIImageView myImageView;

Y en mi archivo CustomCell.m no debería estar anulando esos setters y getters. En su lugar, solo asigne e inyézcalos y añádalos a la vista.

Y de vuelta en mi ViewController.m debería haber agregado las propiedades como tales:

customcell.myImageView.image = [UIImage imageNamed: @ "cartman.png"];