web-dev-qa-db-fra.com

Comment supprimer un élément de UICollectionView avec indexpath.row

J'ai une vue de collection et j'ai essayé de supprimer une cellule de la vue de collection sur la méthode didSelect.J'ai réussi en utilisant la méthode suivante

  [colleVIew deleteItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]];

Mais maintenant, je dois supprimer l'élément sur le clic de bouton de CollectionView Cell.Ici, je ne reçois que le indexpath.row. De cela, je ne suis pas en mesure de supprimer l'élément. J'ai essayé comme ça.

-(void)remove:(int)i {

    NSLog(@"index path%d",i);
   [array removeObjectAtIndex:i];

   NSIndexPath *indexPath =[NSIndexPath indexPathForRow:i inSection:0];
   [colleVIew deleteItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]];
    [colleVIew reloadData];
  }

Mais il doit recharger CollectionView, de sorte que l'animation de l'arrangement des cellules après la suppression n'est pas là. Veuillez suggérer une idée ... merci à l'avance

19
user2000452
-(void)remove:(int)i {

    [self.collectionObj performBatchUpdates:^{
        [array removeObjectAtIndex:i];
        NSIndexPath *indexPath =[NSIndexPath indexPathForRow:i inSection:0];
        [self.collectionObj deleteItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]];

    } completion:^(BOOL finished) {

    }];
}

Essaye ça. Cela peut fonctionner pour vous.

57
LittleIDev

Solution Swift 3:

func remove(_ i: Int) {

    myObjectsList.remove(at: i)

    let indexPath = IndexPath(row: i, section: 0)

    self.collectionView.performBatchUpdates({
        self.collectionView.deleteItems(at: [indexPath])
    }) { (finished) in
        self.collectionView.reloadItems(at: self.collectionView.indexPathsForVisibleItems)
    }

}

et exemple supprimer l'appel:

self.remove(indexPath.row)
13
buxik

Swift 3:

func remove(index: Int) {
    myObjectList.remove(at: index)

    let indexPath = IndexPath(row: index, section: 0)
    collectionView.performBatchUpdates({
        self.collectionView.deleteItems(at: [indexPath])
    }, completion: {
        (finished: Bool) in
        self.collectionView.reloadItems(at: self.collectionView.indexPathsForVisibleItems)
    })
}
3
[array removeObjectAtIndex:[indexPath row]];
    [collection reloadData]; // Collection is UICollectionView

Essaye ça.

3
user1025285

[array removeObjectAtIndex:[indexPath row]];

[self.collectionView deleteItemsAtIndexPaths:@[indexPath]];

Normalement c'est ok ... Vous pouvez voir ce post , il traite du même sujet.

1
Plokstorm

J'ai la réponse ..

Créer un bouton dans UICollectionViewCell // Je l'ai nommé comme supprimer Btn

Puis dans CollectionView Delegate

 - cellForItemAtIndexPath

   [cell.removeBtn addTarget:self action:@selector(RemovePrssd:) forControlEvents:UIControlEventTouchUpInside];

Ajoutez ensuite la méthode

-(void)RemovePrssd:(id)sender{

 UIView *senderButton = (UIView*) sender;
 NSIndexPath *indexPath = [colleVIew indexPathForCell: (UICollectionViewCell *)[[senderButton superview]superview]];

  [array removeObjectAtIndex:indexPath.row];
  [colleVIew deleteItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]];
  }
0
user2000452