滑动删除与cell中的点击事件冲突


滑动删除功能的实现

//滑动删除

- (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



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值