响应者链

响应者对象,指的是有响应和处理事件能力的对象。响应者链就是由一系列的响应者对象构成的一个层次结构。
UIResponder是所有响应对象的基类,在UIResponder类中定义了处理上述各种事件的接口。我们熟悉的UIApplication、UIViewController、UIWindow和所有继承自UIView的UIKit类都直接或间接的继承自UIResponder,所以它们的实例都是可以构成响应者链的响应者对象。
检测触摸操作的顺序:UIApplication->window->viewController->view->检测所有子视图
事件处理的顺序:触摸的子视图->view->viewController->window->UIApplication
响应者链_第1张图片
1、响应者链通常是由视图(UIView)构成的;
2、一个视图的下一个响应者是它视图控制器(UIViewController)(如果有的话),然后再转给它的父视图(Super View);
3、视图控制器(如果有的话)的下一个响应者为其管理的视图的父视图;
4、单例的窗口(UIWindow)的内容视图将指向窗口本身作为它的下一个响应者需要指出的是,Cocoa Touch应用不像Cocoa应用,它只有一个UIWindow对象,因此整个响应者链要简单一点;
5、单例的应用(UIApplication)是一个响应者链的终点,它的下一个响应者指向nil,以结束整个循环。
阻断响应者链
响应者链可以被打断。无法完成检测查询过程
视图类的属性:userInteractionEnabled
响应者链处理原则:①点击检测视图或者第一响应者传递事件或动作消息传给它的视图控制器(如果它有的话);如果没有一个视图控制器,就会传给它的父视图。②如果一个视图或者它的视图控制器不能处理这个事件或者动作消息,它将传递给该视图的父视图。③在这个视图层次中的每个后续的父视图遵循上述的模式,如果它不能处理这个事件或者动作消息的话。④最顶层的视图如果不能处理这个事件或者动作消息,就传给UIWindow对象来处理。⑤如果UIWindow对象不能处理,就传给单件应供程序对象UIApplication,如果应用程序对象也不能处理这个事件或动作对象,将抛弃它。
//打开用户交互
    imageView.userInteractionEnabled = YES;
    //响应者链阻断之后,完成不来检测过程。检测过程完成不了,所以事件就触发不了。
    //而控件阻断响应者链就是关闭用户交互,默认关闭用户交互的控件有UIImageView和UILable
    //以后的项目开发中,如果想让UIIamgeView和UILable响应事件,必须将其交互打开

你可能感兴趣的:(响应者链)