4

在我的 iOS 应用程序中有一个 UITableView,它在其中一个单元格中包含一个自定义子视图。这个单元格是一个交互式视图,它处理触摸事件(touchesBegan、touchesEnded、touchesMoved)以更新自身。

问题是当用户向上或向下“拖动”时,tableView 会捕获这些触摸(尽管我没有将触摸传递到响应者链上),滚动表格并阻止子视图正常工作。只要用户触摸该特定子视图,我就想防止表格滚动。

子视图根本没有对 tableView 的引用。

如何防止表格的滚动行为?


更新

尽管接受了下面的答案,但我最终还是以不同的方式处理了我的情况。我现在在我的自定义视图中处理触摸事件,将它们传递给响应者链(到表格单元格),单元格也处理触摸事件,使用它们来启用/禁用超级视图(表格)上的滚动。

4

2 回答 2

9

在 UITableView 中关闭“可取消的内容触摸”为我解决了这个问题(在 Scroll View / Touch 下的 UITableView 属性检查器中)。我从这个 SO 问题中得到了这个:Scrolling a UITableView inside a UIScrollView

从 UIScrollView:canCancelContentTouches 文档:

如果此属性的值为 NO,则一旦内容视图开始跟踪,无论手指移动如何,滚动视图都不会滚动。

于 2012-10-02T17:56:18.923 回答
0

在这种情况下,我最常用的方法是将信息委托给事件链。设置代表的方式:

subview->cell->table

您可以做的第二件事是通过通知中心发送通知。Table 将监听任何禁止正常滚动的事件。它是超调的,但它会使您的代码保持一致。

目前我没有更多的想法。

于 2012-10-01T12:22:14.843 回答