【发布时间】:2011-06-17 23:06:34
【问题描述】:
我正在尝试检测用户何时在视图中向下和向上触摸。该视图包含一些按钮和其他 UIKit 控件。我想检测这些触摸事件但不消耗它们。
我尝试了两种方法,但都不够:
首先,我添加了一个覆盖 -touchesBegan:withEvent: 和 -touchesEnded:withEvent: 的透明覆盖,并使用
将事件转发给下一个响应者[self.nextResponder touchesBegan:touches withEvent:event]
但是,UIKit 对象似乎忽略了所有转发的事件。
接下来,我尝试覆盖 -pointInside:withEvent: 和 -hitTest:withEvent: 。这对于检测触摸 down 事件非常有效,但是在触摸 up 时不会调用 pointInside:: 和 hitTest:: (即 [[[event allTouches] anyObject] 阶段] 是永远不等于 UITouchPhaseEnded )。
在不干扰与底层 UIControls 交互的情况下检测 touch down 和 touch up 事件的最佳方法是什么?
【问题讨论】:
-
我看不出响应者为什么会忽略
touchesBegan:withEvent:只是因为它已经被发送到具有相同事件的其他东西。这违背了响应者链的意义。你确定nextResponder正在返回一些东西吗? -
@Peter "UIKit 框架的类不是为接收未绑定到它们的触摸而设计的;在编程术语中,这意味着 UITouch 对象的 view 属性必须持有对框架对象以便处理触摸。如果您想有条件地将触摸转发给应用程序中的其他响应者,所有这些响应者都应该是您自己的 UIView 子类的实例。 (developer.apple.com/library/ios/#documentation/EventHandling/…)
标签: iphone cocoa-touch touches touch-event