【问题标题】:Prevent UITableView from scrolling when custom subview is handling touches防止 UITableView 在自定义子视图处理触摸时滚动
【发布时间】:2012-09-22 06:58:51
【问题描述】:

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

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

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

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


更新

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

【问题讨论】:

    标签: objective-c ios cocoa-touch uitableview touch


    【解决方案1】:

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

    来自 UIScrollView:canCancelContentTouches 文档:

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

    【讨论】:

    • 太棒了,正是我需要的!非常感谢!
    【解决方案2】:

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

    subview->cell->table
    

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

    目前我没有更多的想法。

    【讨论】:

    • 您能详细说明您的第一个建议吗?在代码中会是什么样子?至少可以说,通知中心 hack 对我来说似乎不是很干净 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 2012-11-03
    • 2011-09-15
    • 1970-01-01
    相关资源
    最近更新 更多