ios 事件链 和 响应链 初步理解

简介: 当我们在手机屏幕上进行了一次点击,或者滑动,轻扫手机屏幕,接下来,我们的手机该如何回应我们的指令,软件又经历了哪些过程呢?这篇文章是我自己的简单理解,如有不当,请指出。

当我们在手机屏幕上进行了一次点击,或者滑动,轻扫手机屏幕,接下来,我们的手机该如何回应我们的指令,软件又经历了哪些过程呢?这篇文章是我自己的简单理解,如有不当,请指出。
1、事件链
当我们用手指轻触屏幕,首先是app的UIApplication对象接收到了这次点击事件,紧接着,UIApplication对象把这次点击传递给了UIWindow对象,UIWindow对象继续向他的子View对象传递,直到传递到最上层。举个例子:

img_25918d1f9e2e5d09d88c64851e6d9635.png
image.png

我理解的就是,app会把点击事件传给他上面的每一个子View,至于谁来响应,那就是响应链了。就像上图那样,点击了红色的View,传递过程是这样的:
UIApplication对象——>UIWindow对象——>rootVC.view对象——>redview对象,blueView对象。

2、响应链

当每一个view都收到点击事件之后,谁来做出响应呢?首先,能够响应这个点击的是谁呢?能够响应事件的View,userInteractionEnabled属性一定要是yes。
响应过程是和时间传递过程相反的。

img_0622a00a2485cf38171ba04646f8e905.png
image.png

最上面的红色view发现点击事件是在自己的范围内,且自己可以响应这个事件,那么他就不再向下传递了,这就可以理解两个按钮,如果都可以响应点击事件,那么正常情况下应该是上面的按钮响应点击事件。如果红色的View发现自己不具备响应这个事件的能力,那么他会把事件继续向下传递,传递到他的上一层也就是rootVC.view,就这样依次向下传递,直到UIwindow层,发现依然没有可以响应的View,那么这个点击事件就没有响应者,点击无效。

目录
相关文章
|
iOS开发
iOS开发 - touchBegan事件判断点击的位置在View上还是在View的子View上
iOS开发 - touchBegan事件判断点击的位置在View上还是在View的子View上
238 0
iOS开发 - touchBegan事件判断点击的位置在View上还是在View的子View上
|
iOS开发
iOS开发- runtime基本用法解析和用runtime给键盘添加工具栏和按钮响应事件
iOS开发- runtime基本用法解析和用runtime给键盘添加工具栏和按钮响应事件
118 0
|
Android开发 iOS开发
关于监听微信浏览器返回按钮事件处理安卓IOS通用
关于监听微信浏览器返回按钮事件处理安卓IOS通用
282 0
关于监听微信浏览器返回按钮事件处理安卓IOS通用
|
iOS开发
iOS之UIPickerView滚动事件
在开发中,我们会用到pickerview滚动条,那如何监听到pickview的滚动事件呢,之前开发就遇到过一个问题,快速滑动秒选确定按钮,地址显示不对的问题,解决办法为在点选确定辅助按钮的时候判断当时的pickerView是否正在滚动,如果在滚动则不允许触发点选确定后的其他操作。
319 0
iOS之UIPickerView滚动事件
|
iOS开发
iOS事件响应控制(二)
iOS事件响应控制
103 0
iOS事件响应控制(二)
|
iOS开发
iOS事件响应控制(一)
iOS事件响应控制
143 0
iOS事件响应控制(一)