J'utilise un CollectionView dans mon application ios. Chaque cellule de collection contient un bouton de suppression. En cliquant sur le bouton, la cellule doit être supprimée. Après la suppression, cet espace sera rempli avec la cellule ci-dessous (je ne souhaite pas recharger la CollectionView et recommencer à partir du haut)
Comment supprimer une cellule particulière de UICollectionView avec mise en page automatique?
ICollectionView animera et réorganisera automatiquement les cellules après la suppression.
Supprimer les éléments sélectionnés de la vue collection
[self.collectionView performBatchUpdates:^{
NSArray *selectedItemsIndexPaths = [self.collectionView indexPathsForSelectedItems];
// Delete the items from the data source.
[self deleteItemsFromDataSourceAtIndexPaths:selectedItemsIndexPaths];
// Now delete the items from the collection view.
[self.collectionView deleteItemsAtIndexPaths:selectedItemsIndexPaths];
} completion:nil];
// This method is for deleting the selected images from the data source array
-(void)deleteItemsFromDataSourceAtIndexPaths:(NSArray *)itemPaths
{
NSMutableIndexSet *indexSet = [NSMutableIndexSet indexSet];
for (NSIndexPath *itemPath in itemPaths) {
[indexSet addIndex:itemPath.row];
}
[self.images removeObjectsAtIndexes:indexSet]; // self.images is my data source
}
Aucune méthode déléguée fournie à UICollectionViewController comme UITableviewController. Nous pouvons le faire manuellement en ajoutant un long reconnaisseur de gestes à UICollectionView.
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self
action:@selector(activateDeletionMode:)];
longPress.delegate = self;
[collectionView addGestureRecognizer:longPress];
Dans la méthode longGesture, ajoutez un bouton sur cette cellule particulière.
- (void)activateDeletionMode:(UILongPressGestureRecognizer *)gr
{
if (gr.state == UIGestureRecognizerStateBegan) {
if (!isDeleteActive) {
NSIndexPath *indexPath = [collectionView indexPathForItemAtPoint:[gr locationInView:collectionView]];
UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
deletedIndexpath = indexPath.row;
[cell addSubview:deleteButton];
[deleteButton bringSubviewToFront:collectionView];
}
}
}
Dans cette action de bouton,
- (void)delete:(UIButton *)sender
{
[self.arrPhotos removeObjectAtIndex:deletedIndexpath];
[deleteButton removeFromSuperview];
[collectionView reloadData];
}
Je pense que cela peut vous aider.