美文网首页
基于Responder Chain实现对象间交互

基于Responder Chain实现对象间交互

作者: Developer_Yancy | 来源:发表于2023-09-21 10:05 被阅读0次

    前言

    • 最近在开发一个需求时遇到如下代码,代码中是在一个子视图内需要与父视图进行数据交互,但是这种方式只能在特定的场景下使用,也必须确定视图层级才能有效,很容易出现superview.superview.superview......的情况,后面万一视图层级发生改变,很容易导致出现相关bug


      image.png
    • 传统的iOS的对象间交互模式有如下几种:直接property传值、delegate、KVO、通知、block、protocol、多态、Target-Action

    • 如果用传统的交互模式把上面的代码改写,最常使用的就是delegate与block,但是遇到层级较多的情况,可能就需要把delegate或block层层传递,比较麻烦,有没有更方便的实现方式呢?

    换一种优雅的实现方式

    • 通过.superview.superview.superview....发现,这些视图其实都在同一个ResponderChain内,我们其实可以直接利用系统的ResponderChain机制,帮我们实现数据交互

    • 实现方式也很简单,只需要增加一个extension

      image.png
    • 使用方式

      • 发送事件端:
        • 调用self.routerEventWithName(eventName: MiniAppShareContent_Confirm, userInfo: nil)
          image.png
      • 接收事件端:


        image.png
    • 中间层拦截处理完事件后,传递给最终需要刷新的外层页面,如下


      image.png
    • 这种方式的优点

      • 复杂UI层级的页面中,可以避免无谓的delegate声明,也不需要管中间有多少层级,可以直接把交互事件与参数传递出来,方便快捷
      • 众多自定义事件都通过这种方式做了传递,就使得事件处理的逻辑得到归拢。在这个方法内下断点就能管理所有的事件处理
    • 这种方式的局限性

      • 只能对存在于Reponder Chain上的UIResponder对象起作用。(如果同层交互,其实也能通过中间路由进行事件统一分发与处理,就不在本次讨论范围了)

    相关文章

      网友评论

          本文标题:基于Responder Chain实现对象间交互

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