1.一个点击事件发生时系统会先判断事件发生在哪些视图上,这个过程是从父视图向子视图方向的递归检查,以下图为例解释一下:
如果点击放生在E:
(1)点击区域发生在A视图,所以检查他的子视图B和C
(2)点击区域发生在C视图,所以终止B视图分支的检查,继续检查C视图的分支
(3)点击区域发生在E视图,所以终止D视图分支的检查,继续检查E视图的分支
(4)由于E视图没有子视图,所以E分支检查终止,继而整个检查过程结束
注:个人理解在检查这些视图及子视图的过程中,系统回创建一个栈,检查时当点击点在该视图则将视图添加到栈中,直到检查结束
2.上面完成后在理解事件相应者链就好理解了
如果A视图是视图控制器的view,那么就可以在执行上面的操作前将application和window,加入到栈中,执行完上面的操作后栈里的对象由栈底到栈顶得顺序是
application --> window --> view controller --> A --> C --> E,这就形成的响应者链,系统会以从E到application的顺序检查有没有可以接受并处理事件的对象,如果有则终止事件的传递并处理事件操作,如果没有一直传递下去,如果到application时还没有能够响应事件,则抛弃事件不做处理,这就是响应者链之间的传递过程,语言表达能力不是很好,但仔细理解一下就想通了