响应链笔记总结

1.只要继承了UIResponder的对象就可以作为事件的响应者,实际上UIControl继承自UIView,UIView 又继承自uiresponder,所有的对象都可以作为事件的响应者.

当用户与某个控件交互时该控件就作为<<<<第一响应者First responder>>>>

2.第一响应者是响应者链的开始,该事件首先被发送给第一响应者也就是用户触摸屏幕的控件,事件将沿着响应者怜一直向下传播直到被某个响应者处理

3.第一响应者一般都是UIView控件或者UIView子类控件,当用户触摸该控件后,事件最先由该控件本身处理.

4.如果事件从第一响应者开始传播,一直传播到应用界面的顶层视图的视图控制器,该事件依然没有得到处理,那么该事件就会传播到应用程序窗口UIWindow(UIWindow也继承了UIView对象)如果应用程序窗口也不处理该事件,那么就会传播到UIApplication(UIApplication同样继承自UIResponder),如果UIApplication还不处理该事件,那么该事件就会传播到应用程序委托对象>>>(使用Xcode的项目模板生成的所有的IOS项目中的应用程序委托类都继承了UIResponder).

传播路线::::

>First Responder—>First Responder的视图控制器(如果有)—>父容器(如果有)—>父容器的视图控制器(如果有)—>UIWindow—>UIApplication—>应用程序委托对象.

如果某个事件经过了完整的传播过程依然没有被处理.那么该事件就会被丢弃,一般情况,响应者链的任何响应者处理该事件,该事件就会停止传播.

如果某个响应者”拦截”了某个事件那么该响应者要根据条件判断是否要处理该事件当响应者无法处理该事件时.则需要在处理方法中手动传递该事件.代码:

-(void)handleTapEvent:(uiEvent *)event

{

//首先判断条件

if(条件){

//处理事件

}

else{

//手动调用下一个响应者的handleTapEvent方法,手动将事件传播给下一个响应者.

[self.nestResponder handleTapEvent:event];

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一. Hit-Testing 什么是Hit-Testing?对于触摸事件, window首先会尝试将事件交给事件触...
    面糊阅读 963评论 0 50
  • 好奇触摸事件是如何从屏幕转移到APP内的?困惑于Cell怎么突然不能点击了?纠结于如何实现这个奇葩响应需求?亦或是...
    Lotheve阅读 58,686评论 51 604
  • 在iOS开发中经常会涉及到触摸事件。本想自己总结一下,但是遇到了这篇文章,感觉总结的已经很到位,特此转载。作者:L...
    WQ_UESTC阅读 6,184评论 4 26
  • 本文来自:http://ios.jobbole.com/84081/ 前言: 按照时间顺序,事件的生命周期是这样的...
    HackerOnce阅读 2,880评论 1 10
  • 本次笔记主要是整理一下关于 iOS 中关于事件传递和响应机制,参考了一些其他资料加上自己的理解。 事件 Event...
    varlarzh阅读 350评论 0 2