事件传递

2019-01-09  本文已影响4人  高思阳
事件传递流程 htTest实现 响应者链条

左侧是单控制器,右侧是多控制器

响应者链的事件传递过程总结如下:

1.如果view的控制器存在,就传递给控制器处理;如果控制器不存在,则传递给它的父视图

2.在视图层次结构的最顶层,如果也不能处理收到的事件,则将事件传递给window对象进行处理

3.如果window对象也不处理,则将事件传递给 UIApplication对象

4.如果UIApplication也不能处理该事件,则将该事件丢弃。

响应链例子

处理触摸事件

响应者对象都是UIResponder类的实例,在处理特定类型的事件时,系统会调用响应者对象相应的方法去回应事件,响应者必须覆写实现相应的方法。为了处理触摸事件,响应者对象需要实现touchesBegan:withEvent:、touchesMoved:withEvent:和touchesEnded:withEvent:方法中的一个或者多个。

UIKit确定触摸事件的第一响应者之后,如果这个响应者类覆写实现了touchesBegan:withEvent:、touchesMoved:withEvent:和touchesEnded:withEvent:方法中的一个或者多个,那么当触摸开始发生时,系统会调用响应者对象的touchesBegan:withEvent:方法去回应触摸事件。当触摸位置移动时,会调用响应者对象的touchesMoved:withEvent:方法去回应,当触摸结束时,会调用touchesEnded:withEvent:方法去回应。

如果这几个方法一个都没有被实现,那么UIKit会沿着默认的响应者链去传递触摸事件。如果响应者链中有响应者实现了前述方法,那么该响应者对象就会去处理传递来的触摸事件。

否则,该触摸事件就不会被处理。

链接:https://www.jianshu.com/p/84c0ca05abc3

上一篇下一篇

猜你喜欢

热点阅读