响应者链条(事件的传递)(复习笔记)

1、如果父控件不能接收触摸事件,那么子控件就不可能接收到触摸事件。

2、在以下几种情况下,控件是不能接收触摸事件

  1.不接收用户交换  userInteractionEnable= NO;

  2.隐藏 hiden = YES;

  3.透明 alpha = 0.0 ~ 0.01;

提示:UIImageView的userInteractionEnable默认为NO,因此UIImageView以及他的子控件默认不接收触摸事件。

 

3、事件的完整处理过程

  1.先将事件对象由上往下传递(由父控件传递给子控件),找到最合适的控件来处理这个事件(假如点击了绿色的) (如上图:白-->红 --->绿)

  2.调用最合适的控件 touches....(begin.. moving ... end... )方法

  3.如果调用了 [super touches...]方法,则事件将会顺着响应者链条往回传递,传递给上一个响应者(能处理事件的控件)

  4.接着就会调用上一个响应者的  touches....(begin.. moving ... end... )方法

  5.如果这个响应者又调用了  [super touches...]方法,则继续往上传,知道那个没有调用  [super touches...]方法的控件时候才停止

4、谁是上一个响应者(即:nextResbond), 每一个响应者都有一个nextResbond

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

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

解释:比如点击了蓝色,如果蓝色的时控制器,则此时蓝色就是上一个响应者,如果蓝色的view不是控制器的view,此时的上一个响应者是红色(红色为蓝色的父控件)

5、什么是响应者链条

  1.响应者链条是由多个响应者对象构成的链条(什么是响应者对象:能处理事件的对象就是响应者对象,继承自UIResbond对象)

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

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

事件对象:UIEvent   event

链条的作用:当点击了某一个view的时候,view将这一个事件处理完毕,还有可能会将这个事件传递给他的上一个响应者,还可能往上继续传递

 

6、总结,响应者链的事件传递过程

  1.如果view的控制器存在,就传递给控制器;如果控制器不存在,则将其传递给它的父视图

 

  2.在视图层次结构的最顶级视图,如果也不能处理收到的事件或消息,则其将事件或消息传递给window对象进行处理

 

  3.如果window对象也不处理,则其将事件或消息传递给UIApplication对象

 

  4.如果UIApplication也不能处理该事件或消息,则将其丢弃

posted @ 2015-07-24 21:59  第三维  阅读(223)  评论(0编辑  收藏  举报