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

事件的产生与传递

正如我上图所总结的:

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

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

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

响应者链条

左边的情况,接收事件的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,那么父控件就是上一个响应者。

泪,一种痛苦的雨滴,不知从什么时候开始已在我的世界下个不停。

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

相关文章:

你感兴趣的文章:

标签云: