Tengo una colección de vistas,y traté de borrar una celda de vista de colección en didSelect método.He conseguido que utilizando el siguiente método

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

Pero ahora necesito eliminar el elemento en el botón haga clic en desde CollectionView de la Célula.Aquí tengo sólo el indexpath.la fila.
De esto no soy capaz de eliminar el Elemento.
He intentado como este.

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

Pero es necesario volver a cargar el CollectionView.Por lo que la animación de la disposición de las células después de la eliminación no está allí.
Por favor, sugiera una idea..gracias de antemano

OriginalEl autor | 2013-04-30

6 Comentarios

  1. 55
    -(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) {
    
        }];
    }

    Probar esta. Se puede trabajar para usted.

    Gracias…es que me ayude y guardar mi tiempo.

    OriginalEl autor LittleIDev

  2. 12

    Swift 3 solución:

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

    y ejemplo borrar llamada:

    self.remove(indexPath.row)

    OriginalEl autor buxik

  3. 2

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

    OriginalEl autor Mohammad Alikhani

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

    Probar esta.

    OriginalEl autor

  5. 1

    [array removeObjectAtIndex:[indexPath row]];

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

    Normalmente está bien… puedes ver este post, se aborda el mismo tema.

    pero no estoy recibiendo el indexpath me asigna i = indexpath.fila;
    usted tiene que asignar la indexpath para obtener la referencia de la celda.
    🙁 no funciona con este.

    OriginalEl autor Plokstorm

  6. 1

    Tengo la respuesta..

    Crear un botón en CollectionViewCell //lo he denominado como removeBtn

    A continuación, en CollectionView Delegado

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

    A continuación, agregue el método

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

    OriginalEl autor

Dejar respuesta

Please enter your comment!
Please enter your name here