UIcollectionViewCell(UItableviewcell)长按删除操作-阿里云开发者社区

开发者社区> 云计算> 正文
登录阅读全文

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的移动动画)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

其他文章