【问题标题】:Custom UIControl gets touchesCancelled when scrolling; how do I disable scroll?自定义 UIControl 在滚动时获取 touchesCancelled;如何禁用滚动?
【发布时间】:2011-07-20 09:22:40
【问题描述】:

我正在编写 UISwitch 替换(带有自定义图形)。我已经覆盖了 touchesMoved 和朋友,因此您可以在 Yes 和 No 之间拖动小部件,就像 UISwitch 一样。

如果您将其放置在滚动视图中,如果用户将手指沿对角线而不是完全水平移动最微小的一点,则触摸将被取消,并开始滚动。我注意到 UISwitch 和 UIButton 没有表现出这种行为,并且在操作这些控件时滚动永远不会启动。

我如何告诉 UIKit 我想要对这些触摸进行独占控制,实际上是在 touchesBegan 中禁用滚动并在结束/取消时启用滚动?我确信有一些明显的东西,但我查看了 UIControl、UIResponder、UIView 和 UIScrollView 的标题和文档,但没有找到任何东西。

注意:我不想创建 UIScrollView 子类;我无法想象作为正确的解决方案,控件应该是完全独立的。

【问题讨论】:

  • 我假设在你的 UIScrollView 上设置 scrollEnabled = NO 在 touch down 和 touch up 之间不是一个选项吗?
  • @jnic:没错,我没有引用控件子类中的滚动视图。一个可怕的丑陋解决方案是迭代超级视图,直到我找到最近的滚动视图并禁用它,但我试图在这里找到一个漂亮的解决方案。

标签: iphone uikit uiscrollview uicontrol


【解决方案1】:

在滚动视图中设置canCancelContentTouches = NO 和在自定义控件中设置exclusiveTouch = YES 允许这种行为,假设您乐于更改滚动视图上的属性。

【讨论】:

    猜你喜欢
    • 2015-03-10
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多