响应链

作者: QYCD | 来源:发表于2021-09-18 17:41 被阅读0次

不是任何对象都能处理事件,只有继承了UIResponder的对象才能接受并处理事件,称之为"响应者对象"。

  • UIApplication
  • UIViewController
  • UIView
事件传递:
  • 触摸事件的传递是从父控件传递到子控件
  • 也就是UIApplication -> Window -> 寻找处理事件最合适的view

由此,如果父控件不能接受触摸事件,那么子控件就不能接受到触摸事件

如何找到最合适的控件来处理事件?

  • 自己是否接受触摸事件
  • 触摸点是否在自己身上
  • 从后往前遍历子控件数组,重复前面的两个步骤
  • 如果没有符合条件的子控件,那么就是自己

UIView不能接受触摸事件的三种情况:

  • 不允许交互 userInteractionEnabled = NO
  • 隐藏 如果父控件隐藏,它的子控件也会隐藏,隐藏的控件不能接受事件
  • 透明度 控件的透明度小于等于0.01不接受触摸事件

事件传递给谁,就会调用谁的hitTest:withEvent:方法

事件的传递顺序:
产生触摸事件 -> UIApplication事件队列 -> [UIWindow hitTest:withEvent:] -> 返回更合适的view -> [子控件hitTest:withEvent:] -> 返回最合适的view

响应者对象: 能处理事件的对象,也就是继承自UIResponder的对象

经过多个响应者对象的传递,找到合适的响应视图,这多个响应者对象连接起来的链条,称之为响应者链。

如何判断下一个响应者(nextResponder):

  • 如果当前view是控制器的view,那么view的下一个响应者就是控制器
  • 如果当前view不是控制器的view,那么view 的下一个响应者是它的父控件
事件的传递和响应的区别

事件的传递是从上到下(父控件到子控件), 事件的响应是从下到上(沿着响应者链条向上传递,子控件到父控件)

史上最详细的iOS之事件的传递和响应机制-原理篇
iOS开发之-事件的传递和响应

相关文章

  • UIControl && UIGestureRecognizer

    事件传递和响应链 一. 事件传递 二.响应链 响应链: 三.UIGestureRecognizer 四.cance...

  • iOS中对于响应链的理解

    对于响应链的理解: 在IOS中,有响应者链对事件进行响应,所有的响应类都是UIResponder的子类,响应者链是...

  • 基于ResponderChain的事件传递

    ResponderChain对象交互方式本质 响应者链简介 Responder Chain也就是响应链,响应者链是...

  • iOS文档补完计划--UIResponder

    目录 UIResponder 响应链 管理响应者链nextResponderisFirstRespondercan...

  • iOS事件传递过程以及响应链

    响应者响应者为响应事件的UIResponder子类对象,如UIButton、UIView等 响应链响应链是由链接在...

  • UIKit之触摸、响应者链

    触摸 响应者链 //响应者链多个响应者组成的链//首先执行检测过程,信息先从UIApplication->Appd...

  • iOS知识收集

    1. 响应者链 1.1 Cocoa Touch事件处理流程--响应者链 1.2 事件传递之响应链 多线程 http...

  • iOS 响应链

    iOS开发 - 事件传递响应链iOS 响应者链,事件的传递事件传递之响应链Cocoa Touch事件处理流程--响...

  • 关于UI事件传递&事件响应汇总梳理

    目录一、响应链1.响应链2.事件的响应流程3.响应链工作原理二、UIView和CALayer1.UIView和CA...

  • IOS开发 事件响应链

    本节学习内容: 1.事件响应链的概念 2.事件响应链的传递机制 3.事件响应链的应用 响应顺序 Subview>M...

网友评论

      本文标题:响应链

      本文链接:https://www.haomeiwen.com/subject/guqwkltx.html