当它说“无法处理事件”时意味着什么?

时间:2016-07-23 21:09:08

标签: ios swift2 hittest uiresponder uievent

我正在阅读UIResponder课程的文档,我遇到了响应者链。现在据说,例如,当命中测试无法处理事件时,它会将响应者链传递给它。那么,什么样的例子可以澄清如何处理事件?

1 个答案:

答案 0 :(得分:2)

来自Event Handling Guide for iOS

  

如果初始对象 - 命中测试视图或第一响应者 - 未处理事件,UIKit会将事件传递给链中的下一个响应者。 每个响应者通过调用nextResponder方法决定是否要处理事件或将其传递给自己的下一个响应者。此过程将继续,直到响应者对象处理事件或没有更多响应者。

什么"处理"事件意味着真正取决于每个响应者类。在实施响应者时,您需要做出的决定是,对于每个事件,您是否将其传递给下一个响应者。

在该部分的底部还有一个重要的注释:

  

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

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

  

此方法的默认实现不执行任何操作。但是,UIResponder的UIKit子类,特别是UIView,会立即将消息转发到响应者链。要将消息转发给下一个响应者,请将消息发送到super(超类实现);不要将消息直接发送给下一个响应者。例如,

     

[super touchesBegan:touches withEvent:event];

     

如果在不调用super(常用模式)的情况下覆盖此方法,则还必须覆盖处理触摸事件的其他方法,如果仅作为存根(空)实现。