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ó.