UIcollectionViewCell(UItableviewcell)长按删除操作

简介: 功能简单,陷阱不少: 主要涉及两个功能: 1、长按手势:UILongPressGestureRecognizer 2、cell自带的删除操作:deleteItemsAtIndexPaths首先为cell添加长按手势:UILongPressGestureRecognizer* longgs=[[UILongPressGestureRecognizer all

功能简单,陷阱不少:
主要涉及两个功能:
1、长按手势:UILongPressGestureRecognizer
2、cell自带的删除操作:deleteItemsAtIndexPaths

首先为cell添加长按手势:

UILongPressGestureRecognizer* longgs=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longpress:)];
    [cell addGestureRecognizer:longgs];//为cell添加手势
    longgs.minimumPressDuration=1.0;//定义长按识别时长
    longgs.view.tag=indexPath.row;//将手势和cell的序号绑定
    return  cell;

此处注意 [cell addGestureRecognizer:longgs];和longgs.view.tag=indexPath.row;的位置顺序,不能颠倒,要先绑定手势,再赋值tag,因为longs.view中的view实际上就是手势添加到的视图,如果还没有绑定手势,view实际上是没有的。

然后就是调用的删除功能的函数:

-(void)longpress:(UILongPressGestureRecognizer*)ges{
    if(ges.state==UIGestureRecognizerStateBegan){
       //获取目标cell 
       NSInteger row=ges.view.tag;
        //删除操作
        if(self.cellcount.count>1){
        NSIndexPath *index =[NSIndexPath indexPathForRow:row inSection:0];
        NSArray* deletearr=@[index];
            [self.colview deleteItemsAtIndexPaths:deletearr];
        }else{
            [self.colview reloadData];

        }
    }
}

这里要注意两点:
1、要对state进行判定,如果没判定会出现两次操作。
2、自带的cell删除操作deleteItemsAtIndexPaths在只剩最后一个cell调用时会出现奔溃,所以这里要进行判定,当为最后一个时,直接reloadData。(其实都用reloadData都行,不过调用deleteItemsAtIndexPaths会有一个剩余cell的移动动画)

相关文章
TableView列表展开不同cell
TableView列表展开不同cell
113 0
TableView列表展开不同cell
UITableView的创建
UITableView的创建
96 0