事件响应者链的理解

本文详细解析了UI点击事件的传递流程,包括如何从父视图递归检查到子视图,以及事件响应者链的形成过程。通过具体示例帮助理解事件处理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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时还没有能够响应事件,则抛弃事件不做处理,这就是响应者链之间的传递过程,语言表达能力不是很好,但仔细理解一下就想通了





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值