22

我有一个集合视图,我尝试在 didSelect 方法上从集合视图中删除一个单元格。我使用以下方法成功了

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

但是现在我需要从 CollectionView Cell 中删除按钮单击时的项目​​。这里我只得到 indexpath.row。从此我无法删除该项目。我试过这样。

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

但是它需要重新加载CollectionView。所以删除后单元格排列的动画不存在。请提出一个想法..提前谢谢

4

7 回答 7

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

    }];
}

试试这个。它可能对你有用。

于 2013-04-30T10:09:33.537 回答
21

斯威夫特 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)
    }

}

和示例删除调用:

self.remove(indexPath.row)
于 2015-08-17T09:12:56.297 回答
5

迅速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)
    })
}
于 2017-05-24T08:04:56.557 回答
4
[array removeObjectAtIndex:[indexPath row]];
    [collection reloadData]; // Collection is UICollectionView

试试这个。

于 2013-04-30T09:36:10.390 回答
1

[array removeObjectAtIndex:[indexPath row]];

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

通常没关系...您可以看到这篇文章,它涉及相同的主题。

于 2013-04-30T09:25:38.283 回答
0

我得到了答案。。

在 CollectionViewCell 中创建一个按钮 // 我将其命名为 removeBtn

然后在 CollectionView 委托

 - cellForItemAtIndexPath

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

然后添加方法

-(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]];
  }
于 2013-04-30T09:59:56.530 回答
0

重要的是IndexPath你选择哪一个。

[self.collectionView performBatchUpdates:^{
      NSIndexPath *currentIndexPath = [self.collectionView indexPathForCell:cell];
     [self.datas removeObjectAtIndex:currentIndexPath.row];
     [self.collectionView deleteItemsAtIndexPaths:@[currentIndexPath]];
} completion:nil];
于 2020-06-24T02:22:40.937 回答