iOS- 响应者链条简介

在 iOS中,事件可以分为三类: 触摸事件(Multitouch events),加速计事件(Acceleromter events),远程控制事件(Remote control events)
1.什么是响应者链条
1)
响应者链条就是由多个响应者对象连接起来的层次结构,响应者对象是继承自UIResponder的对象,能够处理事件.所有的view 和 viewController 都是响应者对象.利用响应者链条我们可以通过调用touches的super 方法,让多个响应者同时响应该事件

2)每一个应用都有一个响应者链,我们的视图结构是一个 N叉树(一个视图可以有多个子视图,一个子视图同一时刻只能有一个父视图),每一个继承自 UIResponder的对象都可以在这个N叉树中扮演一个节点.当叶节点成为最高响应者的时候,从这个叶节点开始往其父节点开始追溯出一条链,那么对于一个叶节点来说,这一条链就是当前的响应者链. 响应者链将捕获到的 UIEvent 和 UITouch 从叶节点开始层层乡下分发,期间可以选择停止分发,也可以选择继续乡下分发.

2.响应者链的事件传递机制:
如果当前view 不能处理当前事件,那么事件就会沿着响应者链进行传递,直到遇到能够处理该事件的响应者.

事件传递过程:

3.响应者链的传递过程:
1)如果view 的控制器存在,则传递给控制器,若不存在,则传递给它的父视图
2)在视图层次结构的最顶级视图,如果也不能处理收到的消息,则将事件或者消息传递给 window 对象进行处理
3)如果 window 对象也不能处理,则其将事件传递给 UIApplication 对象
4)如果 UIApplication 对象也不能处理该事件或消息,则将其丢弃

例如一个 触摸 事件处理的详细过程:
1)用户点击屏幕后产生一个触摸事件,经过一系列的传递过程后,会找到最合适的视图控件来处理这个事件.
2)找到最合适的视图控件后,就会调用控件的touches 方法来做具体的事件处理

touchesBegan…
touchesMoved…
touchesEnded…

这些touches 方法的默认做法是将事件顺着响应者链条向上传递,将事件交给上一个响应者进行处理

一次完整的触摸事件的传递响应的过程:
UIApplication -> UIWindow -> 递归找到最合适处理事件的控件 -> 控件调用 touches 方法 -> 判断是否实现 touches 方法 -> 没有实现默认会将事件传递给上一个响应者 -> 找到上一个响应者

4.事件处理原则
默认是顺着响应者链条向上传递将事件交给上一个响应者进行处理,如何判断当前响应者的上一个响应者是谁?
1)判断当前view是否是控制器的view,如果是,则上一个响应者是 控制器
2) 如果不是,则当前view 的上一个响应者是其父控件

见下图:
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值