UITableView 在滚动时不响应某些触摸

Posted

技术标签:

【中文标题】UITableView 在滚动时不响应某些触摸【英文标题】:UITableView do not respond some touches while scrolling 【发布时间】:2016-05-25 10:58:03 【问题描述】:

tableView 高速滚动时,用户试图通过触摸停止它,tableView 继续滚动。用户只能在触摸两三下后停止滚动tableView。如果tableView 滚动速度慢,tableView 响应触摸良好。

tableView 显示带有很多子视图的单元格,我在一个视图上定位了问题。 如果我设置problemView.userInteractionEnabled = NO,滚动效果很好。为problemView 的所有子视图设置userInteractionEnabled = NO 但不为problemView 设置userInteractionEnabled = NO,不要帮忙。

这里是显示单元格的图像,problemView 是带有红框的视图。

谁能给个建议,如何解决这个问题?

【问题讨论】:

【参考方案1】:

有几种可能:

您的自定义视图或其超级视图之一已将 userInteractionEnabled 设置为 NO。

在您的自定义视图之上或自定义视图中的表格视图之上还有另一个视图。

table view 所在的自定义 view 比 table view 小(在 clipsToBounds=NO 的情况下,可以看到超出其父级边界的子视图,但不能正常交互)。或者堆栈中的另一个视图也是如此。

自定义视图(或其超级视图之一)错误地覆盖了 pointInside:withEvent: 或 hitTest:withEvent:。

【讨论】:

设置problemView.userInteractionEnabled = NO 解决问题。对于所有子视图 clipsToBounds = YES 并且没有覆盖方法 pointInside:withEvent:hitTest:withEvent: 的自定义视图【参考方案2】:

它可能认为您正在以某种方式对其进行编辑。试试allowsSelectionDuringEditing = YES。 Here is more information 使用 UITableView。

【讨论】:

【参考方案3】:

如果您在 UITableViewCell 中使用 NSTimer,那么我遇到了您所讨论的异常操作。在这种情况下,您需要将隐式调度的计时器替换为显式调度的计时器。

【讨论】:

【参考方案4】:

对我来说,问题是在单元格中的子视图上使用带有单击处理程序的 userInteractionEnabled = true 会破坏滚动。不确定为什么会出现这种情况。在我的情况下,我通过在 tableview 上使用 didSelectRowAt 而不是在子视图上使用自定义点击处理程序解决了这个问题。然后滚动和点击处理都按我的意愿工作。

【讨论】:

以上是关于UITableView 在滚动时不响应某些触摸的主要内容,如果未能解决你的问题,请参考以下文章

UITableView,离屏,滑入屏幕时不接收触摸事件

UIScrollView中的UITableView在滚动后没有响应第一次点击

UITableView 滚动事件

在 UITableView 上实现动态高度

滚动视图在触摸并按住然后滑动时不滚动

滑动时防止触摸启动