代码改变世界

Responder对象

2013-12-24 10:25  三戒1993  阅读(128)  评论(0编辑  收藏  举报
Responder对象

响应者是一个对象,它可以响应事件并处理它们。所有响应者对象是类的,最终从UIResponder的( IOS)或NSResponder ( OS X)继承实例。这些类声明一个编程接口,事件处理,并定义为响应一个默认的行为。一个应用程序的可视对象几乎都是反应,例如,窗口,视图和控件和应用程序对象是一个响应者为好。在iOS中,视图控制器(的UIViewController对象)也响应对象。

Art/responder.jpg
接收事件,响应者必须实现适当的事件处理方法,在某些情况下,告诉应用程序,它可以成为第一个响应者。

第一响应者接收到某些事件第一
在一个应用程序,由最先收到多种事件的响应者对象被称为第一响应者。它接收键盘事件,移动事件,并采取行动的消息,等等。 (鼠标事件和多点触控事件第一次去是鼠标指针或手指下的视图;这种观点可能会或可能不会是第一个响应者)的第一个响应者通常是在一个应用程序认为最适合于处理窗口的视图一个事件。要接收一个事件,响应者也必须表明其愿意成为第一个响应者,它这样做以不同的方式为每个平台:

/ / OS X
- ( BOOL ) acceptsFirstResponder {return YES ; }
 
/ /iOS
- ( BOOL ) canBecomeFirstResponder {return YES ; }
除了接收事件消息,响应者可以接收没有指定的目标操作的消息。 (动作消息是由如按钮,当用户操纵它们的控件控件发送。 )

响应链协同启用事件处理
如果第一个响应者不能处理一个事件或动作消息,它将其转发到所谓的响应链连结的系列“下一个响应者” 。在响应链中允许响应者对象传送处理的事件或动作消息在应用程序的其他对象的责任。如果在响应链中的对象不能处理这个事件或动作,它传递消息给链中的下一个响应者。该消息传播链向上,向更高级别的对象,直到它被处理。如果它没有被处理,该应用将其丢弃。

响应者链的iOS (左)和OS X (右)



一个事件的路径。一个事件了响应者链的一般路径开始于一个视图的第一个鼠标指针或手指下的响应或视图。从那里,它进行了视图层次结构的窗口对象,然后到全局应用程序对象。然而,响应者链中的iOS事件增加了一个变化到这个路径:如果视图是由一个视图控制器管理,如果视图不能处理事件,视图控制器成为下一个响应者。

操作消息的路径。采取行动的消息, OS X和iOS的延长响应链到其他对象。在OS X中,响应链的操作的消息不同,基于文档的架构,使用窗口控制器( NSWindowController )的应用程序,以及一个应用程序,既不符合这些类别的应用程序。此外,如果在OS X的应用程序都包含一个重要窗口和一个主窗口,响应链沿着这一个动作消息传播可能涉及两个窗口的视图层次结构。