需要从UICollectionView中删除单元格

时间:2015-03-06 16:27:56

标签: objective-c uicollectionview

我无法摆脱这种情况,我有一个带有自定义单元格的UICollectionView,每个单元格都有一个X按钮从列表中删除它,我传递给button.tag和IndexPath.item功能我实现了以下方法:

- (void)DeleteProductFromArray:(UIButton *)button {
    NSLog(@"item: %d",button.tag);
    TagHelpConverted = [NSNumber numberWithInt:button.tag];
    TagHelp = button.tag;
    if(DeletedCells.count == 0)
    {
        [DeletedCells addObject:TagHelpConverted];
    }
    else
    {
        for(int i = 0; i < DeletedCells.count; i++)
        {
            if([TagHelpConverted compare:DeletedCells[i]] == NSOrderedDescending)
            {
                TagHelp--;
                NSLog(@"ho diminuito il tag di 1");
            }
        }
        [DeletedCells addObject:TagHelpConverted];
    }

    NSLog(@"valore tagHelp:%d", TagHelp);
    [_feedItems removeObjectAtIndex:TagHelp];

    [self.customCollectionView deleteItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:TagHelp inSection:0]]];
    [self.customCollectionView reloadData];

}

问题是当滚动UICollectionView时调用- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {并且我的NSMutableArray存储了哪些按钮已经被点击了#34;旧值&#34;与此方法分配的新方法相比,该应用程序会删除UICollectionView中的随机项。 我在互联网上搜索了关于删除UICollectionView单元格的帮助,但我发现了几乎所有东西,我在这个问题上非常努力但我无法找到出路的方法,如果有人有解决方案请帮助我

1 个答案:

答案 0 :(得分:2)

要从collectionView中删除单元格,您可以从数据源中删除它们并重新加载collectionView。您希望确保数据源与屏幕上的数据源保持同步。基本上,保持数据源的方式,并调用[collectionView reloadData]。

- (void)didTapDeleteCellBtn:(UIButton *)deleteCellBtn {
    UICollectionViewCell *cell = (UICollectionViewCell *)deleteCellBtn.superview.superview; // Make sure this gets the right cell for the button
    NSIndexPath *indexPath = [self.customCollectionView indexPathForCell:cell];
    id item = self.feedItems[indexPath.row];
    NSMutableArray *updatedFeedItems = [self.feedItems mutableCopy];
    [updatedFeedItems removeObject:item];
    self.feedItems = [NSArray arrayWithArray:updatedFeedItems];
    [self.customCollectionView reloadData];
}