如何使iOS 7 UIScrollView抑制嵌入式UIView上的触摸事件

时间:2013-10-08 01:01:41

标签: ios objective-c uiscrollview uievent

想象一下UIScrollView嵌入式(子视图)UIView,排列在列中。在iOS6和之前的版本中,滚动视图可以配置为当您用手指轻拂时,嵌入的视图即使初始触摸位于其中一个子视图上也不会接收到触摸事件。但是如果您在不轻弹的情况下触摸子视图,则滚动视图会确定这不是滚动操作,而是将触摸事件转发到嵌入视图。如果您希望能够在UIView内拖放嵌入的UIScrollView,这是非常方便的行为。

在iOS 7中,文档指出设置UIScrollView属性delaysContentTouches会导致触摸事件延迟,直到UIScrollView决定是否滚动它。但事实上,这似乎并不起作用。如果滚动触摸事件在其中一个子视图上,则子视图立即接收触摸事件并响应它们。因此,如果子视图被编程为拖放,则在滚动视图也滚动时开始拖动。

此行为的模型似乎已更改,因为iOS 5/6在确定这是否为滚动操作时都会抑制触摸事件。现在有一些新方法可以在UIScrollView决定滚动后取消触摸事件。但是,如果拖放代码也开始移动子视图,这显然没有用。

我的问题:当您通过抚摸子视图启动滚动操作时,有没有办法阻止iOS 7 UIScrollView调用其子视图上的低级触摸事件? 当我说“低级别”时,我的意思是实际的触摸事件,而不是使用手势识别器。我确信只需将delaysContentTouches属性设置为YES就不起作用。

这个问题完全破坏了一些非常复杂的代码,这些代码在iOS 5和6中运行顺畅而精美;并且,到目前为止,我发现无法告诉UIScrollView将事件抑制到其子视图,直到它确定是否正在滚动它。事件经历,然后在滚动视图确定滚动之后触发取消触摸事件。看起来底层模型已被重新定义为更糟糕,或者这是一个错误。任何见解将不胜感激。

2 个答案:

答案 0 :(得分:0)

你确定它适用于iOS5 / 6吗?根据我的经验和UIScrollview delaysContentTouches issue这样的帖子,它不起作用。

也许示例代码显示它在iOS5 / 6上工作但在iOS7上没有帮助回答你的问题。

答案 1 :(得分:0)

这对我有用:

[scrollView setCanCancelContentTouches:YES];
[scrollView setDelaysContentTouches:YES];