IOS响应者链,事件传递和阻断

前几天去面试,被问到响应者链条,突然发现自己也有点模糊,这里自己总结一下,做个记录。

ios中,触摸事件的处理分为两个阶段,传递阶段和响应阶段。

事件传递:事件传递是指触摸事件发生后,事件的传递路径。触摸事件只能有硬件感知(手机),然后由系统处理(ios系统)并分发给当前活动的app。ios中,能够接收事件的对象必须是UIResponseder对象,在app中,第一个接收到事件的是APPDelegate对象,然后依次传递给 UIApplication->UIWindow -> ViewController ->Controller的View -> 页面中的UI控件。这个过程是IOS触摸事件的传递过程(事件传递链条)。

当事件到达传递的终点是,事件传递过程接收,进入事件处理阶段 ,也就是事件的响应(处理)阶段。在事件的响应阶段,响应过程和事件的传递过程相反,由事件传递链条末端反向传递,到AppDelega对象结束,即页面控件 -> ViewController的View -> VIewController -> UIWindow -->UIApplication -- > APPDelegate。我们在这个传递过程中的每个阶段都有机会对触摸事件作出处理。这个过程被称作响应者链条。

事件传递阻断,UIView有一个userInterfaceEnabled属性,当我们把这个属性的值设置为false的时候,代表我们要将这个UIView从事件的传递链条中移除,此时,这个UIView的上一个Responseder对象为事件传递链条的末端,事件的传递过程结束,进入事件的响应阶段。这个UIView的子视图由于没有加入事件的传递链条中,所以他们被排除在事件的响应链条之外,和这个UIView一起失去了对事件的处理能力。

事件响应阻断,ios的触摸事件处理有两种。一种是只有一个响应者,子视图响应触摸事件后,父视图不在响应触摸事件。一种是有多个事件响应者,子视图响应触摸事件后,父视图可以继续响应触摸事件。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值