2013-04-30 6 views
15

Ho una visione di raccolta, e ho cercato di eliminare una cella da vista collezione su didSelect method.I è riuscito a che utilizzando il seguente metodoCome eliminare un elemento dalla UICollectionView con indexpath.row

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

Ma ora ho bisogno di eliminare l'elemento sul pulsante clic da CollectionView Cell.Here solo ottenere il indexpath.row. Da questo non riesco a cancellare l'oggetto. Ho provato così.

-(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]; 
    } 

Ma è necessario ricaricare CollectionView. Quindi l'animazione della disposizione delle celle dopo l'eliminazione non è presente. Si prega di suggerire un idea..thanks in anticipo

risposta

52
-(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) { 

    }]; 
} 

Prova questo. Potrebbe funzionare per te.

+0

Grazie ... mi aiuta e mi risparmia tempo. –

1

[array removeObjectAtIndex:[indexPath row]];

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

Normalmente è ok ... Si può vedere this post, si tratta con lo stesso soggetto.

+0

ma io non sto ottenendo l'indexpath mi assegna i = indexpath .riga; –

+0

@NithinMK è necessario assegnare il percorso di indice per ottenere il riferimento della cella. –

+0

:-(non funziona con questo ... – byJeevan

2
[array removeObjectAtIndex:[indexPath row]]; 
    [collection reloadData]; // Collection is UICollectionView 

Prova questo.

1

ho avuto la risposta ..

Creare un pulsante in CollectionViewCell // ho chiamato come RemoveBtn

Poi nel CollectionView Delegato

- cellForItemAtIndexPath 

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

quindi aggiungere il metodo di

-(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]]; 
    } 
9

Swift 3 soluzione:

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) 
    } 

} 

e l'esempio eliminare chiamata:

self.remove(indexPath.row) 
0

rapida 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) 
    }) 
}