Responder object

Responder是一个可以响应事件并出来这些事件的对象。

 所有的Responder对象都是从UIResponder (iOS) 或者 NSResponder (OS X)类继承而来的实例。这些类声明了事件的处理接口,同时也定义响应者的行为。

在一个app中可见的对象大部分都是响应者,例如:window,view,和control,同时app对象也是一个响应者。另外在ios中UIViewController也是响应对象。

为了接收时间,响应者必须完成事件的处理方法,来告诉app它可以成为第一响应者。

Responder object_第1张图片



响应者接收事件

在app中,第一响应者可以接收很多种事件。(键盘事件,移动事件,动作消息等等)。为了接受事件,响应者必须表明它愿意成为第一响应者,我们可以使用下面的函数来实现。

// OS X

- (BOOL)acceptsFirstResponder { return YES; }

 

//iOS

- (BOOL)canBecomeFirstResponder { return YES; }


响应链和事件控制之间的合作

在app中操作的时候,如果第一响应者(在视图的最顶端的视图,或者可以说是我们首先在app中看见的视图)不能接收事件或者消息的时候,它会将其转发到响应链结构中的下一个响应者。在app中,响应链允许响应者转发事件的或者消息处理给其他的对象。如果一个对象在响应链中,但是它不能处理事件或者消息动作,它就会把事件或者消息动作传给响应链中的下一个响应者。传递的消息会沿着响应链向上传递给更高级别的对象,直接事件被处理,而如果传递到响应链的最顶层,事件还是未被处理,那么app就会把这个事件丢掉。

下面看iOS(左边)和Mac(右边)下响应链传递方式

Responder object_第2张图片



你可能感兴趣的:(ios,Object-C,responder)