文档章节

事件响应者链

杭城小刘
 杭城小刘
发布于 2017/10/13 17:04
字数 621
阅读 5
收藏 0
点赞 0
评论 0

实验1:

定义 BaseView,在里面实现方法touchBegan,监听当前哪个类调用了该方法。

在控制器的界面上加5个颜色不同的view,每个view自定义view去实现,因此在不同的view上的手势就可以由不同的view拦截到。

UI效果图

//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方法的默认做法是将事件顺着响应者链条向上传递,将事件交给上一个响应者处理。

响应者链条

响应者链条

事件传递的完整过程

  1. 先将事件对象由上往下传递(父控件传递给子控件),找到最合适的控件来处理
  2. 调用最合适控件的touch方法
  3. 如果调用了[super touches...]方法就会将事件顺着响应者链条向上传递,传递给上一个响应者
  4. 接着就会调用上一个响应者的touches...方法

事件响应者

如何判断该控件的上一个响应者?
  1. 如果当前这个view是控制器的view,那么上一个响应者就是控制器
  2. 如果当前这个view不是控制器的view,那么上一个响应者就是父控件。

事件传递给UIApplication后如果不处理的话,该事件会销毁掉。

控制器view上的子控件的touch...方法如果子控件不处理那么都会顺着响应者链条向上传递给上一层响应者对象,比如可以交给控制器处理。

© 著作权归作者所有

共有 人打赏支持
杭城小刘
粉丝 14
博文 108
码字总数 47960
作品 0
杭州
iOS工程师
响应者和响应者链

核心的应用程序对象-、、和-都是响应者,它们是(参见图6-19)的直接或间接子类的实例。这个抽象类定义了能够响应事件的对象的接口和期望的行为。的子类完全或部分实现了这个行为。 图6-1...

子寒在秋 ⋅ 2014/07/22 ⋅ 0

​ 《从零开始学Swift》学习笔记(Day 68)——Cocoa Touch设计模式及应用之响应者

原创文章,欢迎转载。转载请注明:关东升的博客 应用与用户进行交互,依赖于各种各样的事件。事件响应者对象是可以响应事件并对其进行处理的对象,响应者链是由一系列链接在一起的响应者组成...

智捷课堂 ⋅ 2016/02/19 ⋅ 0

理解事件处理,响应者和响应者链

原文地址: 如原作者发现有侵权行为可责令我在24小时之内删除,前提是你能看到。 翻译者:毛毛可 学习事件是怎样在你的app中传递的,并学会应该如何处理它们. Apps使用responder(响应者对象)...

井FFFFFF ⋅ 2017/12/07 ⋅ 0

《从零开始学Swift》学习笔记(Day 68)——Cocoa Touch设计模式及应用之响应者链与触摸事件

原创文章,欢迎转载。转载请注明:关东升的博客 应用与用户进行交互,依赖于各种各样的事件。事件响应者对象是可以响应事件并对其进行处理的对象,响应者链是由一系列链接在一起的响应者组成...

tony关东升 ⋅ 2016/03/09 ⋅ 0

【响应链】cocoatouch事件处理流程深入解析

cocoatouch 事件处理流程 apple 文档 传递链和响应链 避开事件处理 事件分类 响应者链(Responder Chain)

创意总监 ⋅ 2016/06/16 ⋅ 0

iOS开发-关于UIResponder

我们的App与用户进行交互,基本上是依赖于各种各样的事件。例如,用户点击界面上的按钮,我们需要触发一个按钮点击事件,并进行相应的处理,以给用户一个响应。UIView的三大职责之一就是处理...

神补刀 ⋅ 2016/03/19 ⋅ 0

iOS事件分发机制与实践

iOS事件的传递与响应是一个重要的话题,网上谈论的很多,但大多讲述并不完整,本文将结合苹果官方的文档对事件的传递与响应原理及应用实践做一个比较完整的总结。文章将依次介绍下列内容: ...

凝望向北 ⋅ 2017/08/17 ⋅ 0

IOS 触摸事件分发机制详解

欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:MelonTeam 前言 很多时候大家都不关心IOS触摸事件的分发机制的实现原理,当遇到以下几种情形的时候你很可能抓破头皮都找不到解...

⋅ 01/12 ⋅ 0

UI控件无法响应点击等事件的探索

UI控件无法响应点击等事件的探索 一、响应者链 关于响应者链,有如下一段介绍:每一个应用有一个响应者链,我们的视图结构是一个N叉树(一个视图可以有多个子视图,一个子视图同一时刻只有一个...

法斗斗 ⋅ 2016/05/11 ⋅ 0

UI_04 事件处理

⼀、事件 iOS 有三种事件类型: 触控事件(UIEventTypeTouches):单点、多点触控以及各种手势操作; 传感器事件(UIEventTypeMotion):重力、加速度传感器等; 远程控制事件(UIEventType...

黑伞将军 ⋅ 2015/08/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

设计模式--装饰者模式

装饰者模式 定义 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。 通用类图 意图 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比...

gaob2001 ⋅ 51分钟前 ⋅ 0

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部