AI智能
改变未来

iOS 响应者链

1,假设某个controller的一个view上有一个button。触摸屏幕,触摸事件会按着响应者链传递。

触摸按钮,触摸事件的响应者链是,button->view->ViewController->UIWindow->UIApplication->AppDelegate

如果传递到AppDelegate,没有响应触摸事件,则此事件会被系统丢弃。

2.查看响应者链

NSLog(@\”%@\”,sender.nextResponder);

NSLog(@\”%@\”,sender.nextResponder.nextResponder);

3.第一响应者,该响应者通常是用户当前正在交互的对象。第一响应者是响应者链的开始,还有其他响应者。

只要超类是UIResponder的类,都可以是响应者。

第一个响应者几乎总是视图或控件,并且首先对事件进行响应。

第一响应者将事件传递给它的视图控制器(如果有的话),然后是它的父视图。

4.

如果第一个响应者不处理某个特殊事件,则他会将该事件传递到响应者链的下一级。

如果该链中的下一个对象响应此特殊事件,则他通常会处理该事件,这将停止该事件沿着响应者链向前传递。

如果事件通过整个响应者链并且没有对象处理该事件,则丢弃该事件。

5.转发事件:保持响应者链的活动状态

//在某些情况下,如果某个响应者只对某个事件进行部分处理,则该响应者将采取操作,并将该事件转发给链中的下一个响应者。但通常不会发生这种情况。正常情况下,当对象响应事件时,即到达了该事件的行尾。

– (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

    [super touchesBegan:touches withEvent:event];//传递触摸事件

    NSLog(@\”touchesBegan\”);

}

6,

以一个按钮点击事件为例:

当用户点击按钮时,iphone OS获取到了 “单击”,这一事件的发生,记录了“单击”这一操作的所有信息以UITouch和UIEvent的形式存储在当前应用程序的事件队列中。负责管理应用程序的UIApplication单件将对象将事件从队列的顶部取出,然后派发下去到焦点窗口即拥有当前用户事件焦点的窗口(当前应用程序窗口UIWindow),由uiwindow对象将它再发送给第一响应者进行处理,第一响应者就是当前的button。

UIResponser是所有相应对象的基类。

7。http://www.cnblogs.com/zhw511006/p/3517248.html

一个iOS应用中,在一块屏幕上通常有很多的UI控件,也就是有很多的View,那么当一个事件发生时,如何来确定是哪个View响应了这个事件呢,接下来我们就一起来看看。

寻找hit-test view

什么是hit-test view呢?简单来说就是你触发事件所在的那个View,寻找hit-test view的过程就叫做Hit-Testing。

  • 点赞
  • 收藏
  • 分享
  • 文章举报

uugrass发布了3 篇原创文章 · 获赞 0 · 访问量 4375私信关注

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » iOS 响应者链