0

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

我怎样才能让它工作?UIScrollView 将无法工作,除非它是第一响应者或以其他方式获取事件。

感谢您的任何帮助。可耻的是,Apple 的文档和 API 在某些方面很糟糕。

4

1 回答 1

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 对象),它被指定为除触摸事件之外的事件的第一个接收者...

于 2011-01-05T01:47:48.630 回答