iOS事件的传递

一,事件的传递

  UIApplication-----传递事件-----"被触摸的UIview".理解红色的文字很重要,即使被直接触摸,也不一定在当前视图处理事件.要知理由,请看下文解说.

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

  那么系统是怎么找到是哪个视图来处理当前的触摸事件呢?

    从UIApplication出发,一个一个的视图往下找,判断当前视图是否能接收触摸事件.然后在判断触摸点是否发生在自己的身上.一直重复.

  

  特别注意:事件的传递过程中,是不会处理事件的.只是一个传递的过程.

二,事件链

  通过上面的分析,这里即将引出一个事件链的概念.

  事件链的理解,正好与事件的传递相反.在找到"最终""被触摸视图UIView"的情况下.还要往上寻找,谁能处理触摸事件.

  如果当前的视图没有处理触摸事件的能力(没有实现方法),那就会一直往上寻找.如果找到了,那么就会执行这个触摸事件.如果调用了"super",那么还会往上寻找,否者终止.

  (自学一下,控制器事件处理吧)

  特别注意:A视图,B视图,C视图.如果B视图没有触摸事件的能力,但是在C视图中调用了"super".那么将有A,C视图来处理这个触摸事件.

  谁是父事件对象?

  1,如果这个视图是控制器的视图,那么这个视图的父事件对象是控制器.

  2,如果这个视图不是控制器的视图,那么这个视图的父事件对象是父视图.

  

原文地址:https://www.cnblogs.com/iOS771722918/p/4858687.html