tutorial example collection ios objective-c uicollectionview

ios - example - Seleccionar artículos programáticamente en UICollectionView



uicollectionviewcell indexpath (4)

Tengo un UICollectionViewController :

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return [self.pageTastes count]; } - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { CellTasteCollectionView *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath]; Taste *taste = [self.pageTastes objectAtIndex:indexPath.item]; [[cell imageView] setImage:taste.image]; [cell setObjectId:taste.objectId]; return cell; }

Funciona. Tengo esto en viewDidLoad , lo que permite al usuario elegir varios elementos:

[self.collectionView setAllowsMultipleSelection:YES];

Lo que quiero tener es que la primera vez que se carga CollectionView, algunos elementos se seleccionan mediante programación, en función de su objectId en CellTasteCollectionView .

Así es como estoy haciendo esto:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{ Taste *taste = [self.pageTastes objectAtIndex:indexPath.item]; printf("%s/n", [taste.objectId UTF8String]); }

Se llama cuando el usuario hace clic en el elemento; esto no es lo que quiero: quiero que el elemento se seleccione automáticamente cuando se carga UICollectionView .

¿Cómo hago esto?


Creo que le falta este método de la referencia de clase UICollectionView :

- (void)selectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UICollectionViewScrollPosition)scrollPosition

Puede utilizar este método varias veces si desea selecciones múltiples.


Para el comportamiento correcto, llame a la función 4 en una fila:

// Deselect self.collection.deselectItem(at: previousPath, animated: true) self.collectionView(self.collection, didDeselectItemAt: previousPath) // Select self.collection.selectItem(at: path, animated: true, scrollPosition: .centeredVertically) self.collectionView(self.collection, didSelectItemAt: path)


didSelectItemAt no se llama si llama a selectItem programación. Deberías llamar al método manualmente después de él.

self.collectionView.selectItem(at: IndexPath(item: 0, section: 0), animated: true, scrollPosition: .bottom) self.collectionView(self.collectionView, didSelectItemAt: IndexPath(item: 0, section: 0))


NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; [self.districtTableview selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop]; [self tableView:weakSelf.districtTableview didSelectRowAtIndexPath:indexPath];

Utilicé el método anterior en tableview, y funcionó.