美文网首页
ios的事件处理 一 基本概念

ios的事件处理 一 基本概念

作者: Oliver_Dev | 来源:发表于2018-07-13 02:07 被阅读0次

    Key word

    • Event Handling
    • Responder
    • the Responder Chain

    Responder

    1.一个Responder是UIResponder Class的实例化
    2.常见的UIResponder子类有UIView,UIViewController, UIApplication
    3.中文解释: 响应者

    简述

    • 场景1: 在屏幕上点击按钮
      App会接收到一个Event, 并自动将该Event会分配给最合适的响应者 (第一响应者 First Reponder),此时是UIButton,UIButton对该事件进行处理。
    • 场景2:在屏幕上点击文本
      App会接收到一个Event,首先会把这个Event分配给UILabel,但是UILabel并不处理Event事件,所以UILabel会将该Event分配给它的superView.以此延续,最终结果有两种
      1.找到能处理该事件的对象,just do something
      2.没有找到,该点击没有引起任何的效果
      可以看到,在场景2中,会有一个Event的传导路线。这个就是Responder Chain (中文解释:响应者链)

    Responder Chain

    1. UIKit本身有一套默认的规则 决定了每个Responder的next Responder,当前Responder无法响应Event时,直接将该Event丢给next Responder
      如下图,当点击文本时
      1.UILabel并不处理点击事件
      2.UIKit会将该事件丢给UILabel的next Responder,此处为它
      的superView
      3.延着链路,一路传递
      UIViewController -> UIWindow -> UIApplication
      image.png
      UIKit本身默认的规则为
      1.UIView的next Responder是superView,当superView为nil时,则为该view所属的container(绝大多数情况为UIViewController或者极少情况下为UIWindow)
      2.UIViewController的next Responder是UIWindow
      3.UIWindow的next Responder是UIApplication

    // 基本上2,3的规则是不会去改变的。另外 基于职责分配原则,通常也不会在UIWindow和UIApplication做事件处理

    需要特殊说明的是当UIViewController本身是一个containerController,会包含childViewController,childViewController并不会参与到响应者链中,只有childViewController.View才会

    待续

    相关文章

      网友评论

          本文标题:ios的事件处理 一 基本概念

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