从集合视图中删除项目后的标签问题

Posted

技术标签:

【中文标题】从集合视图中删除项目后的标签问题【英文标题】:Tag issue after deletion of Item from Collection View 【发布时间】:2014-02-10 12:43:55 【问题描述】:

我在我的应用中实现了一个集合视图。

集合单元格包含一个名为删除项目的按钮。 删除一个项目后,标签不会更新,所以,如果我删除第二个项目,那么它将删除它旁边的一个,即标签。

我的代码如下:

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath

static NSString *CellIdentifier = @"GradientCell";
    UICollectionViewCell *cell = [cv dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];

UIButton *btn_close=[UIButton buttonWithType:UIButtonTypeCustom];
    [btn_close setFrame:CGRectMake(50, 00, 18, 18)];
    [btn_close setBackgroundImage:[UIImage imageNamed:@"close.png"] forState:UIControlStateNormal];
    [btn_close addTarget:self action:@selector(delete_image:) forControlEvents:UIControlEventTouchUpInside];
    btn_close.tag=indexPath.row;
    return cell;


-(void)delete_image:(UIButton*)sender

[self.col_view performBatchUpdates:^
            [arr_images removeObjectAtIndex:sender.tag];

        NSIndexPath *indexPath =[NSIndexPath indexPathForRow:sender.tag inSection:0];
        [self.col_view deleteItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]];

     completion:^(BOOL finished) 

    ];

【问题讨论】:

【参考方案1】:

简单的答案是不要使用该行作为您的标签!! 您应该将任何其他信息保存在“标签”中,以后可以将其转换为行号。例如,您可以将图像保存在“arr_images”中,理想情况下,您应该存储指向该单元格所表示的对象的指针。

当你想删除对象时,你应该使用该对象重新构建索引路径

xxxx = [arr_images indexOfObject:sender.tag];
NSIndexPath *indexPath =[NSIndexPath indexPathForRow:xxxx inSection:0];
[self.col_view deleteItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]];

【讨论】:

以上是关于从集合视图中删除项目后的标签问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有动画的情况下从集合视图中删除项目?

从集合视图中删除项目

从模态视图关闭的标签栏项目中删除选择图像

如何从 SqlAlchemy 中的多对多集合中删除所有项目?

使用协议从集合视图单元格中删除核心数据

如何在要删除的单元格上使用 longtapGesture 从集合视图中删除 uicollectionviewcell?迅速