使用第一响应者和第一响应者与目标行动

Posted

技术标签:

【中文标题】使用第一响应者和第一响应者与目标行动【英文标题】:Use of first responders and first responder vs. target-action 【发布时间】:2013-07-22 07:12:40 【问题描述】:

我了解 target-actions 的用途和需要。 但是我遇到了“First Responder”这个概念。 有人可以解释为什么需要它吗?有什么是使用 target-actions 做不到的?

【问题讨论】:

【参考方案1】:

在应用程序中,首先接收多种事件的响应者对象称为第一响应者。它接收关键事件、运动事件和动作消息等。 (鼠标事件和多点触控事件首先进入鼠标指针或手指下方的视图;该视图可能是也可能不是第一响应者。)第一响应者通常是应用程序认为最适合处理的窗口中的视图一个事件。要接收事件,响应者还必须表明其愿意成为第一响应者;它针对每个平台以不同的方式执行此操作

在设计应用时,您可能希望动态响应事件。例如,触摸可能发生在屏幕上的许多不同对象中,您必须决定要响应给定事件的对象并了解该对象如何接收事件。

当用户生成的事件发生时,UIKit 会创建一个事件对象,其中包含处理该事件所需的信息。然后它将事件对象放入活动应用程序的事件队列中。对于触摸事件,该对象是封装在 UIEvent 对象中的一组触摸。对于运动事件,事件对象根据您使用的框架和您感兴趣的运动事件类型而有所不同。

一个事件沿着特定的路径传播,直到它被传递给一个可以处理它的对象。首先,单例 UIApplication 对象从队列顶部获取一个事件并调度它进行处理。通常,它将事件发送到应用程序的关键窗口对象,该对象将事件传递给初始对象进行处理。初始对象取决于事件的类型。

触摸事件。对于触摸事件,窗口对象首先尝试将事件传递给发生触摸的视图。该视图称为命中测试视图。查找命中测试视图的过程称为命中测试,在“命中测试返回发生触摸的视图”中进行了描述。文档。

用于运动和远程控制事件。通过这些事件,窗口对象将摇动或远程控制事件发送给第一响应者进行处理。第一个响应者在“响应者链由响应者对象组成”中进行了描述。

这些事件路径的最终目标是找到一个可以处理和响应事件的对象。因此,UIKit 首先将事件发送给最适合处理事件的对象。对于触摸事件,该对象是命中测试视图,对于其他事件,该对象是第一响应者。

更多信息,请关注here...

【讨论】:

以上是关于使用第一响应者和第一响应者与目标行动的主要内容,如果未能解决你的问题,请参考以下文章

NSTextfield + NSMenu 和第一响应者

iOS - Xcode 中的文件所有者和第一响应者是啥?

带有 TextField 和第一响应者的自定义 UITableViewCell

文件所有者 + 第一响应者

视图控制器何时会成为第一响应者?

如何处理 NSTextField 子类的第一响应者状态?