滑动删除功能的实现
//滑动删除
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
returnYES;
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
returnUITableViewCellEditingStyleDelete;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
if (editingStyle ==UITableViewCellEditingStyleDelete) {
//do something
}
}
- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{
return@"删除";
}
但是...
左滑删除是系统的滑动手势,当在按钮+号区域滑动时,手指触到cell,cell会先跟着手指滑动,等到滑动结束显示删除时,会立刻响应按钮+号的点击事件,如果响应事件中增加刷新tableview的方法,cell就会立刻滑回隐藏,如果事件为跳转页面,那就会显示删除时,立刻跳转页面。这显然是不能接受的。
这个问题牵扯到一个事件分发机制,需要在响应滑动状态时拦截按钮的点击事件
所以我想是否可以在
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
所以我就想我可以在
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
...
if (cell.editingStyle ==UITableViewCellEditingStyleDelete) {
cell.userInteractionEnabled =NO;
}else{
cell.userInteractionEnabled =YES;
}
...};
方法中加入判断,当cell处于系统滑动手势状态时,禁止cell中所有事件,否则再启用事件,但是禁用后就没有办法启用了。。。
所以我就直接在cell的点击事件中加入一个判断,也不禁用按钮
//购物车加减操作
- (void) shopAdditonOrMinusButtonAction: (UIButton *)button{
if (self.editingStyle == UITableViewCellEditingStyleDelete) {
return;
}
...}
-over