touchesEnded:withEvent:来自UIScrollView First Responder

时间:2011-01-04 18:50:58

标签: cocoa-touch uikit uiscrollview first-responder uiresponder

我已经将UIScrollView作为第一个响应者。我需要在其后面的视图上将触摸事件维护到-touchesEnded:withEvent:方法。我尝试过使用-nextResponder方法但失败了。我已经尝试将-touchesEnded:withEvent:转发给它背后的视图,但失败了。

我如何让它工作?除非它是第一个响应者或以其他方式获取事件,否则UIScrollView将无法工作。

感谢您的帮助。羞耻Apple的文档和API在各个领域都很糟糕。

1 个答案:

答案 0 :(得分:0)

UIScrollView以稍微不寻常的方式处理触摸。从课堂参考:

  

因为滚动视图没有滚动条,所以它必须知道触摸是否表示要滚动的意图与跟踪内容中的子视图的意图。为了做出这种确定,它通过启动计时器暂时拦截触碰事件,并且在计时器触发之前,查看触摸手指是否进行任何移动。如果计时器在没有显着位置变化的情况下触发,则滚动视图将跟踪事件发送到内容视图的触摸子视图。如果用户在计时器过去之前将手指拖得足够远,则滚动视图会取消子视图中的任何跟踪并自行滚动...

滚动视图的内容视图中的子视图最终会收到滚动视图的非滚动触摸。

滚动视图的超级视图不太可能看到触摸事件,因为其-hitTest:withEvent:将返回滚动视图,因此触摸事件将被发送到滚动视图,而不需要将它们转发回应答器链到父视图。

第一响应者不会影响触摸事件的传递,请参阅http://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/EventsiPhoneOS/EventsiPhoneOS.html#//apple_ref/doc/uid/TP40009541-CH2-SW5

  

第一个响应者是应用程序中的响应者对象(通常是UIView对象),被指定为触摸事件以外的事件的第一个接收者...