事件响应者链
来源:互联网 发布:阿里云 语音验证码 编辑:程序博客网 时间:2024/05/16 15:41
实验1:
定义 BaseView,在里面实现方法touchBegan,监听当前哪个类调用了该方法。
在控制器的界面上加5个颜色不同的view,每个view自定义view去实现,因此在不同的view上的手势就可以由不同的view拦截到。
//BaseView#import "BaseView.h"@implementation BaseView-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{NSLog(@"%@",[self class]);}
结果:点击不同的View打印出不同的类名。
结论:
- 触摸事件是从父控件传递到子控件的。
- 点击了绿色(图上的2级)的view:UIApplication-> UIWindow -> UIViewController的view -> 绿色的view
- 点击了蓝色(图上的3级)的view:UIApplication-> UIWindow -> UIViewController的view -> 红棕色的view -> 蓝色的view
- 点击了黄色(图上的4级)的view:UIApplication -> UIWindow -> UIViewController的view -> 红棕色的view -> 蓝色的view -> 黄色的view
注意:如果父控件不能接收触摸事件,那么这个父控件的子控件也不能接收触摸事件
如何找到最合适的控件来接收触摸事件?
- 自己能否接收触摸事件?
- 触摸点是否在自己身上?
- 从后往前遍历子控件,重复前面2个步骤
- 如果没有符合条件的子控件,那么就自己最适合处理
事件响应原理
产生的touch方法的默认做法是将事件顺着响应者链条向上传递,将事件交给上一个响应者处理。
响应者链条
事件传递的完整过程
- 先将事件对象由上往下传递(父控件传递给子控件),找到最合适的控件来处理
- 调用最合适控件的touch方法
- 如果调用了[super touches…]方法就会将事件顺着响应者链条向上传递,传递给上一个响应者
- 接着就会调用上一个响应者的touches…方法
事件响应者
如何判断该控件的上一个响应者?
- 如果当前这个view是控制器的view,那么上一个响应者就是控制器
- 如果当前这个view不是控制器的view,那么上一个响应者就是父控件。
事件传递给UIApplication后如果不处理的话,该事件会销毁掉。
控制器view上的子控件的touch…方法如果子控件不处理那么都会顺着响应者链条向上传递给上一层响应者对象,比如可以交给控制器处理。
阅读全文
0 0
- 事件响应者链
- 触摸事件<响应者链>
- ios-事件响应者链
- 触摸、事件、响应者链
- 事件分发 响应者链
- iOS 事件和响应者链,手势
- 响应者链的事件传递过程
- IOS事件响应者链简述
- iOS 的事件处理 响应者链
- iOS开发 - 响应者链触摸事件
- 事件响应者链的理解
- iOS - 响应者链触摸事件
- iOS事件传递:响应者链
- 06 事件、触摸、响应者链
- 事件响应者链传递流程
- 响应者链的事件传递过程
- iOS事件处理---响应者链
- Ui:响应者链,手势,摇动事件
- 跨服务存储传递HttpContext Cookies
- DD-WRT中的各种无线模式
- MyEclipse-Tomcat-MAVEN-SVN项目完整环境学习搭建
- Opencv读取.dat格式CT数据
- 电商项目的大致架构
- 事件响应者链
- 协程写作方式实现的单进程 单线程 多协程的http(其实是tcp啦)服务器,实测性能和workerman相差不远(当然稳定性没法比), 基本每行代码都有中文注释~~呲牙呲牙呲牙 没办法用作生产环境
- linux下脚本编译java,定时删除日志
- 配置sonar、jenkins进行持续审查
- 打地鼠游戏案例
- 定制自己的vue模版
- python 实现线性链表(单链表)
- 《Spring Boot in Action》【5. Groovy】
- 微星MSI GP62 6QE