事件的产生与传递 及 响应者链条

事件的产生与传递

事件的产生与传递 及 响应者链条_第1张图片

正如我上图所总结的:

1.左边部分:我总结了事件传递的流程

2.中间部分:举例说明了实际情况

3.右边部分:一个View不能接受事件的情况


响应者链条


事件的产生与传递 及 响应者链条_第2张图片


左边的情况,接收事件的initial view如果不能处理该事件并且她不是顶层的View,则事件会往它的父View进行传递。initial view的父View获取事件后如果仍不能处理,则继续往上传递,循环这个过程。如果顶层的View还是不能处理这个事件的话,则会将事件传递给它们的ViewController,如果ViewController也不能处理,则传递给Window(UIWindow),此时Window不能处理的话就将事件传递给Application(UIApplication),最后如果连Application也不能处理,则废弃该事件。

右边图的流程唯一不同就在于,如果当前的ViewController是由层级关系的,那么当子ViewController不能处理事件时,它会将事件继续往上传递,直到传递到其Root ViewController,后面的流程就跟之前分析的一样了。

事件的完整处理过程总结:
1.先将事件对象由上往下传递(由父控件传递给子控件),找到最合适的控件来处理这个事件。
2.调用最合适控件的touches... 等方法。
3.如果调用了[super touches...]; 就会将事件顺着响应者链条往上传递;传递给上一个响应者。
4.接着就会调用上一个响应者的touches... 方法。

什么是响应者链条?
1.响应者链条是由多个响应者对象连接起来的链条(什么是响应者对象:能处理事件的对象)。
2.利用响应者链条,能让多个控件处理同一个触摸事件。
3.怎么利用链条往上传递?谁是上一个响应者?
1> 如果当前这个View是控制器的View,那么控制器就是上一个响应者。
2> 如果当前这个View不是控制器的View,那么父控件就是上一个响应者。

你可能感兴趣的:(对象,application,及,事件的产生与传递,响应者链条)