功能简单,陷阱不少:
主要涉及两个功能:
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的移动动画)