【问题标题】:Adding UINavigationController functionality to a container controller with a defined Protocol使用定义的协议将 UINavigationController 功能添加到容器控制器
【发布时间】:2013-01-24 23:52:17
【问题描述】:

我设计了一个自定义容器视图控制器,它模仿路径或 facebook 之类的功能(滑动甲板效果)。为了与这些控制器通信,我定义了一个协议,允许向他们询问一些信息/提醒他们一些事件。

现在,我决定将这些子视图控制器之一嵌入到导航控制器中。不幸的是,导航控制器现在正在接收这些协议方法,我遇到了崩溃。

我的临时解决方案是创建一个中间方法,询问我要与之交谈的控制器是否实际上是导航控制器,如果是,则将消息发送到根。

有没有更优雅的方式来做到这一点?似乎代码有异味,必须编写一个“中间”方法来为我的基本控制器中的每个协议方法执行此检查。有什么想法吗??

谢谢

【问题讨论】:

    标签: ios xcode delegates uinavigationcontroller protocols


    【解决方案1】:

    您是否尝试过将父视图控制器嵌入到 NavigationController 而不是特定的子控制器中?通过这样做,您有效地允许所有子控制器参与导航。这将允许您正确使用您的协议。

    【讨论】:

      【解决方案2】:

      听起来您需要使用委托设置您的子视图控制器并将其消息发送到其委托而不是其父级。

      如果您不了解代表:Cocoa Fundamentals Guide

      【讨论】:

      • 等等,但我想从我的容器给孩子打电话。为孩子创建一个代表不会走错方向吗?我不明白如何在必须跟踪子控制器的所有单独实例的同时保持此控制器的灵活性。
      • 也许最好的方法是覆盖 currentChildViewController 的 getter,然后在那里检查导航控制器。
      • 如果是这样,为什么父母不能只保留对孩子的引用?
      • 因为孩子可能是也可能不是导航控制器
      猜你喜欢
      • 2014-06-13
      • 2013-10-15
      • 1970-01-01
      • 2014-05-23
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      • 2018-07-15
      • 1970-01-01
      相关资源
      最近更新 更多