web-dev-qa-db-fra.com

Supprimer la cellule de UICollectionView sans recharger par le haut

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?

18
New Jango Tester

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

}
36
Anil Varghese

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.

7
Himanshu