滑动删除 UITableViewCell 很难触发

Posted

技术标签:

【中文标题】滑动删除 UITableViewCell 很难触发【英文标题】:Swipe to delete UITableViewCell very difficult to trigger 【发布时间】:2014-03-11 22:15:49 【问题描述】:

所以我有一个表格视图,我希望用户能够向左滑动以显示删除按钮,这与它在邮件应用程序中的工作方式相同。我的问题不是我不能让它工作 - 它确实,我可以向左滑动行,它显示一个删除按钮,并且用户可以单击它来删除单元格(我通过实现 editorStyleForRowAtIndexPath 来做到这一点)。我的问题是所需的滑动非常不敏感。您必须非常快速且完美地水平滑动。它不像邮件中的刷卡那么顺利。这只是它的方式还是我忽略了一些东西?

我想也许单元格中的视图以某种方式阻止了滑动手势,但我进入 xib 并将所有内容设置为隐藏,但仍然很难滑动。我尝试的另一件事是添加我自己的滑动手势识别器来触发删除显示。我尝试将它添加到单元格(不起作用),表视图(不),我还尝试添加一个清晰的彩色 UIView 作为最前面的子视图并将其放在上面,但仍然没有。有什么想法吗?

编辑: 我刚刚创建了一个新项目来测试编辑样式删除功能的响应能力——非常简单的表格视图只是为了看看它是如何工作的。在我的实际项目中,它比单元格更容易滑动。我的测试项目和我的实际项目之间没有太多区别:实际在 cellForRowAtIndexPath 上加载一个 xib,而在测试项目中它使用默认样式的单元格,实际项目在单元格中具有图像视图和 uilabels,而测试项目只是一个 uilabel...什么会不会让它反应迟钝?

【问题讨论】:

确保你没有比必要的更频繁地重新加载 UITableView。这将中止用于滑动删除的内置手势识别器。 只在两个地方使用reload,我在每个地方都放了断点,都没有被触发 你发现了吗?只是好奇你是如何修复它的...... 是的,我做到了,结果我的视图控制器的父类附加了一个手势。我从中得出的结论是:如果您的手势识别器可以正常工作,但表现得很挑剔/行为怪异,那么最好的选择是存在与之竞争的手势。 干得好!当你得到解决方案的细节时,你应该把它作为答案发布;这是完全合法/标准的,是帮助他人的最佳方式。这很可能是一个影响他人的问题;尤其是在 ios 7 中,还有很多其他的手势识别器。这就是为什么 iOS 7 引入了在手势识别器的竞争主张之间进行调解的新方法。 【参考方案1】:

原来在一个我完全没有注意到的超类中隐藏了一个与之竞争的手势识别器。一旦我意识到这一点,就可以通过禁用该屏幕的其他识别器来轻松解决(尽管我相信通过设置手势识别器优先级会有更正确的方法)。无论如何,如果您遇到类似的问题 - UIGestureRecognizer 的非常奇怪/意外的行为 - 我会确保没有其他手势识别器干扰。

【讨论】:

【参考方案2】:

您可以尝试“自己动手”。在内置的 UITableView 中,我们可能正在响应向左滑动手势识别器(如您所说,该手势必须快速且非常水平才能识别)。另一方面,这在 Mail 中的工作方式是单元格内容实际上包含一个 UIScrollView,只能水平滚动 - 这就是您向左滑动时所做的事情,只需像使用任何滚动视图一样拖动. (这就是为什么您可以查看“删除”按钮,然后将消息拖回右侧。)

【讨论】:

我刚刚创建了一个新项目来测试编辑样式删除功能的响应能力——非常简单的表格视图只是为了看看它是如何工作的。在我的实际项目中,它比单元格更容易滑动。我的测试项目和我的实际项目之间没有太多区别:实际在 cellForRowAtIndexPath 上加载一个 xib,而在测试项目中它使用默认样式的单元格,实际项目在单元格中具有图像视图和 uilabels,而测试项目只是一个 uilabel...什么会不会让它反应迟钝? 你有其他手势识别器,这样它们就可以互相争斗了吗? ^ 就是这样!我不知道的平移手势优先于滑动

以上是关于滑动删除 UITableViewCell 很难触发的主要内容,如果未能解决你的问题,请参考以下文章

在 uitableviewcell 中激活 uislider 的延迟时间

完全滑动删除 UITableViewCell 和部分滑动显示选项

滑动删除 UITableViewCell 时,偶尔会出现红色减号删除图标

UITableViewCell 覆盖向左滑动的删除按钮

如何避免在 UITableViewCell 上滑动删除调用 setEditing

向左滑动时未剪切子视图以删除 UITableViewCell