14

Sto utilizzando un CollectionView nella mia app ios. Ogni cella di raccolta contiene un pulsante Elimina. Facendo clic sul pulsante la cella deve essere cancellata. Dopo la cancellazione, tale spazio verrà riempito con cella sottostante (non desidero ricaricare CollectionView e ricominciare dall'inizio)Elimina cella da UICollectionView senza ricaricare dall'alto

Come si elimina una cella specifica da UICollectionView con l'esecuzione automatica?

+0

In breve: Si dovrebbe seguire il protocollo MVC. Elimina i dati dal modello e quindi ricarica la vista. Per una risposta più dettagliata dovresti pubblicare il tuo codice (solo le parti in cui sospetti che il problema sia) e descrivere ciò che hai già provato ... Altrimenti tutto quello che otterrai saranno i downvotes invece di una buona risposta. Prende una buona domanda per ottenere una buona risposta. Leggere [FAQ] (http://stackoverflow.com/faq) non fa male. –

risposta

6

Nessun metodo delegato fornito a UICollectionViewController come UITableviewController. Possiamo farlo manualmente aggiungendo un lungo riconoscimento di gesture a UICollectionView.

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self 
                         action:@selector(activateDeletionMode:)]; 
longPress.delegate = self; 
[collectionView addGestureRecognizer:longPress]; 

Nel metodo longGesture, aggiungere il pulsante su quella particolare cella.

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

Nell'ambito di tale azione pulsante,

- (void)delete:(UIButton *)sender 
{ 
    [self.arrPhotos removeObjectAtIndex:deletedIndexpath]; 
    [deleteButton removeFromSuperview]; 
    [collectionView reloadData]; 
} 

penso che ti può aiutare.

+0

'[deleteButton bringSubviewToFront: collectionView];' sembra essere un errore. –

30

UICollectionView si animerà e riorganizzerà automaticamente le celle dopo la cancellazione.

elementi selezionati Elimina da vista collezione

[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 

} 
+0

tempo di eliminazione della cella è stato risolto come rendere l'animazione lenta o veloce. –

+0

È necessario creare una sottoclasse di UICollectionViewFlowLayout. Implementare in particolare finalLayoutAttributForItemAtIndexPath. Controlla [questo] (http://stackoverflow.com/questions/16690831/uicollectionview-animations-insert-delete-items) –

Problemi correlati