滑动以删除单元格不会取消UIButton操作

Gui*_*rme 5 uibutton uitableview ios swipe-gesture

UITableView已启用滑动删除功能.每个单元都有一个UIButton执行动作的动作(在这种情况下,执行一个segue).

我希望如果我通过触摸按钮来滑动单元格,按钮的动作将被取消/忽略,并且只会轻扫滑动.然而,实际发生的是检测和处理两种手势(轻扫+轻击).

这意味着如果我只想删除一个单元格并通过触摸按钮"意外"滑动,则应用程序将转到下一个屏幕.

在这种情况下,如何强制我的应用忽略点击?

Gui*_*rme 9

对我来说,八月的回答非常好,但我想出了如何让它变得更好:

检查表是否处于编辑模式以确定按钮是否应该执行其操作将使其按预期运行,但在用户体验中仍会存在问题:

如果用户想要退出编辑模式,他应该能够点击单元格中的任何位置来实现该功能,包括按钮.但是,该UIButton应用程序仍首先分析该操作,点击该按钮不会退出编辑模式.

我找到的解决方案是在进入编辑模式时禁用按钮的用户交互,并在完成后重新启用它:

// View with tag = 1 is the UIButton in question
- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath {
  [(UIButton *)[[tableView cellForRowAtIndexPath:indexPath] viewWithTag:1] setUserInteractionEnabled:NO];
}

- (void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath {
  [(UIButton *)[[tableView cellForRowAtIndexPath:indexPath] viewWithTag:1] setUserInteractionEnabled:YES];
}
Run Code Online (Sandbox Code Playgroud)

这样,拖动按钮进入编辑模式将不会触发按钮的操作,而将其按下以退出编辑模式将确实退出编辑模式.