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

时间:2013-07-22 07:12:41

标签: cocoa-touch first-responder

我了解 target-actions 的使用和需求。 但我遇到了“第一响应者”这个概念。 有人可以解释为什么需要吗?使用目标行动无法做到这一点?

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

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

有关详细信息,请查看here...