消息响应链

当用户点击了屏幕中的button,事件是如何响应的呢,为什么点击其他区域没有事件响应呢?事件又是怎么触发的呢?


屏幕快照 2017-05-04 下午3.58.28.png

首先当用户点击button后,操作系统监听到用户点击了某点的位置,将该消息传递给当前APP的运行循环

在程序内部的流程图大概如下


运行循环 .png

1.当前的运行循环监听到屏幕上有一点被触摸,运行循环将该消息传递给UIApplication,查找触摸对象
2.UIApplication将消息传递给UIWindow,查找触摸对象
3.UIWindow将消息传递给根控制器
4.根控制器将消息传递给self.view
5.self.view会查找所有的子视图,判断触摸的点在哪个子控件内,然后将消息传递给子控件
6.子控件查找该触摸点在哪个控件内,查找到button后,button,button之下没有了子控件,那么该button就是第一事件响应者,触摸的对象就是button
7.button调用touchBegin方法,将消息发送给子控件,
子控件在调用touchBegin方法,将消息发送给self.view
以此类推一直传递到运行循环
8.运行循环就知道,点击用户点击的是button按钮,就会去查找button是否注册了事件,注册了就会调用该事件,没有注册,该消息会被丢弃。

事件传递设计的方法
1.从上到下查找对象用 hitTest方法
2.事件响应,用touchXXX方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容