事件的产生与传递 及 响应者链条

事件的产生与传递

正如我上图所总结的:

1.左边部分:我总结了事件传递的流程

2.中间部分:举例说明了实际情况

3.右边部分:一个View不能接受事件的情况

响应者链条

左边的情况,接收事件的initial view如果不能处理该事件并且她不是顶层的View,则事件会往它的父View进行传递。initial view的父View获取事件后如果仍不能处理,则继续往上传递,循环这个过程。如果顶层的View还是不能处理这个事件的话,则会将事件传递给它们的ViewController,如果ViewController也不能处理,则传递给Window(UIWindow),此时Window不能处理的话就将事件传递给Application(UIApplication),最后如果连Application也不能处理,则废弃该事件。

右边图的流程唯一不同就在于,如果当前的ViewController是由层级关系的,那么当子ViewController不能处理事件时,它会将事件继续往上传递,直到传递到其Root ViewController,后面的流程就跟之前分析的一样了。

事件的完整处理过程总结:

1.先将事件对象由上往下传递(由父控件传递给子控件),找到最合适的控件来处理这个事件。

2.调用最合适控件的touches... 等方法。

3.如果调用了[super touches...]; 就会将事件顺着响应者链条往上传递;传递给上一个响应者。

4.接着就会调用上一个响应者的touches... 方法。

什么是响应者链条?

1.响应者链条是由多个响应者对象连接起来的链条(什么是响应者对象:能处理事件的对象)。

2.利用响应者链条,能让多个控件处理同一个触摸事件。

3.怎么利用链条往上传递?谁是上一个响应者?

1> 如果当前这个View是控制器的View,那么控制器就是上一个响应者。

2> 如果当前这个View不是控制器的View,那么父控件就是上一个响应者。

时间: 2024-12-20 17:14:52

事件的产生与传递 及 响应者链条的相关文章

iOS中的事件传递和响应者链条

iOS中的事件传递和响应者链条 本文转自:http://www.linuxidc.com/Linux/2015-08/121270.htm 首先我们来看看ios中事件的产生和传递过程 1.发生触摸事件后,系统会将事件加入到一个由UIApplication管理的队列事件中来 2.UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常会发发送事件给应用程序的主窗口 3.主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件 4.找到合适的视图控件后,就会调用视图

iOS中事件的传递和响应者链条

在iOS 开发中,常见的事件有三种类型,分别是:(1)触摸事件:平常手指在屏幕上滑动,产生的事件都是触摸事件(2)加速计事件:微信的摇一摇就是典型的加速计事件(3)远程控制事件:耳机控制歌曲上一首.下一首.暂停就是远程控制事件的应用.在触摸事件中,通常情况下,点击哪个控件,哪个控件就会产生反应.比如说,点击确定按钮,确定按钮会响应该事件,点击取消按钮,取消按钮会响应该事件.那么,系统是如何决定哪一个视图(控件)来响应该事件呢?当发生触摸事件后,系统会将该事件加入到一个由 UIApplicatio

触摸事件传递与响应者链条

触摸事件传递 •发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中 •UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常,先发送事件给应用程序的主窗口(keyWindow) •主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件,这也是整个事件处理过程的第一步 •触摸事件的传递是从父控件传递到子控件,如果父控件不能接收触摸事件,那么子控件就不可能接收到触摸事件 响应者链条 1.如果view的控制器存在,就传递给控制器:

事件的传递和响应者链条

本文链接地址:http://www.linuxidc.com/Linux/2015-08/121270.htm 首先我们来看看iOS中事件的产生和传递过程: 1.发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的队列事件中 2.UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常会先发送事件给应用程序的主窗口(keyWindow) 3.主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件 4.找到合适的视图控件后,就会调用视图控件

iOS开发中的事件处理(二)-事件传递,响应者链条-

转载请注明出处:http://blog.csdn.net/whjForWork/article/details/44926833 事件处理的事件传递 简介: 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件 队列中,UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常,先发送事件给应用程序的主窗口(keyWindow) UIView不接受触摸事件的三种情况: 不接收用户交互 userInteractionEnabled = NO

IOS开发——UI进阶篇(十二)事件处理,触摸事件,UITouch,UIEvent,响应者链条,手势识别

触摸事件 在用户使用app过程中,会产生各种各样的事件 一.iOS中的事件可以分为3大类型 触摸事件加速计事件远程控制事件 响应者对象在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为“响应者对象” UIApplication.UIViewController.UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 二.UIResponder UIResponder内部提供了以下方法来处理事件触摸事件- (v

IOS开发—事件处理,触摸事件,UITouch,UIEvent,响应者链条,手势识别

触摸事件 在用户使用app过程中,会产生各种各样的事件 一.iOS中的事件可以分为3大类型 触摸事件加速计事件远程控制事件 响应者对象在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为“响应者对象” UIApplication.UIViewController.UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 二.UIResponder UIResponder内部提供了以下方法来处理事件触摸事件- (v

【学习笔记】响应者链条

自学iOS有一两个月了,一直没有好好整理学习笔记,打算今天开始慢慢补上,就当是复习和补缺补漏吧. iOS的事件大致分为三种:触摸事件.加速计事件.远程控制事件 首先要理解以下几个概念: 一.响应者对象: 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为“响应者对象”. UIApplication.UIViewController.UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件. 二.UIRespon

iOS开发--响应者链条

简单来说就是 :一级一级的找到响应的视图,如果没有就传给UIWindow实例和UIApplication实例,要是他们也处理不了,就丢弃这次事件... 对于IOS设备用户来说,他们操作设备的方式主要有三种:触摸屏幕.晃动设备.通过遥控设施控制设备.对应的事件类型有以下三种: 1.触屏事件(Touch Event) 2.运动事件(Motion Event) 3.远端控制事件(Remote-Control Event) 响应者链条概念: iOS系统检测到手指触摸(Touch)操作时会将其打包成一个U