iOS事件传递及响应者关系链

一.事件传递
1.当iOS程序中发生触摸事件后,系统会将事件加入到UIApplication管理的一个任务队列中
2.UIApplication将处于任务队列最前端的事件向下分发给UIWindow。
3.UIWindow将事件向下分发给RootViewController的view。
4.控制器的view首先看自己是否能处理事件,触摸点是否在自己身上。如果能,那么继续寻找子视图。
5.遍历子控件,重复以上两步。
6.如果没有找到,那么自己就是事件处理者。
7.如果自己不能处理,那么不做任何处理。
其中 UIView不接受事件处理的情况主要有以下三种
  1. alpha <0.01
  2. userInteractionEnabled = NO
  3. hidden = YES


二.事件响应

事件递归到最适合处理事件的控件调用touches方法 --> 判断是否实现touches方法 --> 没有实现默认会将事件传递给上一个响应者 --> 找到上一个响应者
PS:如果直到UIApplication都不响应,那么这个事件就被废弃了。
1.响应者链条:由很多响应者链接在一起组合起来的一个链条
响应者:继承自UIResponder的对象称之为响应者对象
2.上一个响应者(默认做法是将事件顺着响应者链条向上传递,将事件交给上一个响应者进行处理) 
如何判断当前响应者的上一个响应者是谁?
1>判断当前是否是控制器的View,如果是,上一个响应者就是控制器
2>如果当前不是控制器的View,上一个响应者就是父控件
3.响应者链条有什么用?
可以让一个触摸事件发声的时候让多个响应者同时响应该事件
在子类的实现文件里的touchesBegan:方法里加上如下代码即可
[super touchesBegan:touches withEvent:event]

你可能感兴趣的:(iOS事件传递及响应者关系链)