1

我正在阅读 UIResponder 类的文档,并且遇到了响应者链。现在据说,例如,当一个命中测试无法处理一个事件时,它会将它传递给一个响应者链。那么,有什么例子可以阐明如何处理事件?

4

1 回答 1

2

来自iOS 的事件处理指南

如果初始对象——命中测试视图或第一响应者——不处理事件,UIKit 将事件传递给链中的下一个响应者。每个响应者通过调用 nextResponder 方法来决定是要处理该事件还是将其传递给自己的下一个响应者。这个过程一直持续到响应者对象处理事件或没有更多响应者为止。

“处理”事件的含义实际上取决于每个响应者类。实现响应者时需要做出的决定是,对于每个事件,是否将其传递给下一个响应者。

该部分的底部还有一个重要说明:

重要提示:如果您实现自定义视图来处理远程控制事件、动作消息、使用 UIKit 的摇动事件或编辑菜单消息,请不要将事件或消息直接转发到 nextResponder 以将其发送到响应者链。相反,调用当前事件处理方法的超类实现,让 UIKit 为您处理响应者链的遍历。

同样,对于响应者是处理触摸事件的子类的最常见情况UIView,所有这些方法包括:

此方法的默认实现什么也不做。然而,UIResponder 的直接 UIKit 子类,尤其是 UIView,将消息转发到响应者链。要将消息转发给下一个响应者,请将消息发送给 super(超类实现);不要将消息直接发送给下一个响应者。例如,

[super touchesBegan:touches withEvent:event];

如果您在不调用 super 的情况下覆盖此方法(一种常见的使用模式),那么您还必须覆盖用于处理触摸事件的其他方法,如果只是作为存根(空)实现。

于 2016-07-24T18:10:56.970 回答