当它说“无法处理事件”时是啥意思?

Posted

技术标签:

【中文标题】当它说“无法处理事件”时是啥意思?【英文标题】:what does it mean when it said "an event couldn't be handled"?当它说“无法处理事件”时是什么意思? 【发布时间】:2016-07-23 21:09:08 【问题描述】:

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

【问题讨论】:

【参考方案1】:

来自Event Handling Guide for ios

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

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

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

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

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

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

[super touchesBegan:touches withEvent:event];

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

【讨论】:

那么,为什么响应者无法处理它,所以在这种情况下我将它传递给下一个?我想它会根据事件的类型而有所不同,但是我需要一个例子。谢谢 考虑一个游戏板。游戏板上的单个棋子可能会对触摸事件做出反应,以便它可以响应轻击手势,但您可能希望在棋盘上处理滑动或拖动手势,以便它可以管理棋子之间的交互。 好的,所以如果他想让这个响应者或其他人来处理事件,那是根据编码者的目的? 是的,当您创建响应者时,您需要确定它对事件的反应方式以及是否允许这些事件沿着响应者链继续,以便其他响应者接收它们。

以上是关于当它说“无法处理事件”时是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

\? 附加到文件路径时是啥意思

TypeScript 管道运算符与字符串一起使用时是啥意思?

iOS面试题:runloop 的 mode 作用是啥?

当它在标准输出上说“创建模式......”时,“git commit”是啥意思?

iOS之深入解析事件传递的响应链

事件绑定是啥意思?