防止 UITableView 在自定义子视图处理触摸时滚动
Posted
技术标签:
【中文标题】防止 UITableView 在自定义子视图处理触摸时滚动【英文标题】:Prevent UITableView from scrolling when custom subview is handling touches 【发布时间】:2012-09-22 06:58:51 【问题描述】:在我的 ios 应用程序中有一个 UITableView,它在其中一个单元格中包含一个自定义子视图。该单元格是一个交互式视图,它处理触摸事件(touchesBegan、touchesEnded、touchesMoved)以更新自身。
问题在于,当用户向上或向下“拖动”时,tableView 会捕获这些触摸(尽管我没有将触摸传递到响应者链上),滚动表格并阻止子视图正常工作。只要用户触摸该特定子视图,我就想防止表格滚动。
子视图根本没有对 tableView 的引用。
如何防止表格的滚动行为?
更新
尽管接受了下面的答案,但我最终还是以不同的方式处理了我的情况。我现在在我的自定义视图中处理触摸事件,将它们传递给响应者链(到表格单元格),单元格也处理触摸事件,使用它们来启用/禁用超级视图(表格)上的滚动。
【问题讨论】:
【参考方案1】:在 UITableView 中关闭“可取消的内容触摸”为我解决了这个问题(在 Scroll View / Touch 下的 UITableView 属性检查器中)。我从这个 SO 问题中得到了这个:Scrolling a UITableView inside a UIScrollView
来自 UIScrollView:canCancelContentTouches 文档:
如果该属性的值为NO,则滚动视图不滚动 内容视图开始跟踪后,无论手指移动如何。
【讨论】:
太棒了,正是我需要的!非常感谢!【参考方案2】:在这种情况下,我最常用的方法是将信息委托给事件链。设置代表的方式:
subview->cell->table
您可以做的第二件事是通过通知中心发送通知。 Table 将监听任何禁止正常滚动的事件。它是超调的,但它会使您的代码保持一致。
目前我没有更多的想法。
【讨论】:
您能详细说明您的第一个建议吗?在代码中会是什么样子?至少可以说,通知中心 hack 对我来说似乎不是很干净 :)以上是关于防止 UITableView 在自定义子视图处理触摸时滚动的主要内容,如果未能解决你的问题,请参考以下文章