【问题标题】:What's the difference between unwind segues and popping to view controllers?unwind segues 和 popping to view controllers 有什么区别?
【发布时间】:2019-01-16 15:19:03
【问题描述】:

我正在开发的应用程序需要实现一个工作流,以允许用户在表单中输入信息。我计划不使用滚动视图,而是将其分解为一组单独的视图控制器,这些控制器将由导航控制器管理。我首先在故事板中布置所有表单片段,然后开始连接表单不同部分的所有推送和展开转场。

我的问题是,与简单地使用导航控制器的 pushViewController 和 popToViewController 方法并完全跳过情节提要相比,使用所有这些 push 和 unwind segues 有什么好处?在内存管理或性能方面有什么不同吗?就设计和可维护性而言,简单地使用 push 和 pop 不是更好的做法吗?我在解决此问题的文档中找不到任何内容。

【问题讨论】:

    标签: ios cocoa-touch


    【解决方案1】:

    就他们所做的而言,基本上没有区别。使用展开的好处是,您可以将数据传回您要展开的控制器。如果您使用 pop 方法,那么您必须创建一个委托协议来执行此操作。但很多都是主观的。您可以使用对您来说更舒适的。我喜欢使用故事板,因为它可以很容易地查看控制器之间的关系。当您在一个大型团队中工作时,使用故事板可能会成为一个问题(所以我听说过),所以这是另一个考虑因素。

    【讨论】:

    • 关于将数据传回父视图控制器的要点。我记得在使用推送/弹出时感受到了这种影响,但并不反对使用协议/委托模式。还有,混搭方法大概也不是没可能吧?
    • @CameronAskew,是的,混合搭配非常好。 unwinds 有用的另一种情况是,当你有一个层次结构的控制器,这些层次结构已经放在屏幕上,混合了模式演示和推送——这可能很复杂,使用 pops 和 dismisses 的组合返回,但很简单放松。
    • @rdelmar 是的,他们的工作有所不同。 Unwind 可以将您带回任何父控制器(通过任何推送和模式组合),但 pop 只会删除当前控制器以用于导航堆栈。
    【解决方案2】:

    这是一个很好的问题。

    在我的第一个 iOS 项目中,我遵循了在线教程并使用了故事板 segues 等。在我的第二个 iOS 项目中,我放弃了它,只是推送和弹出视图控制器。

    我实际上发现它更干净,因为使用故事板方式,您必须调用performSegueWithIdentifier,然后您可以通过与prepareForSegue 同步来准备接收视图控制器。当您可以准备一个视图控制器并将其全部推送到一个位置时,为什么要这样做?

    此外,它将视图控制器与转换解耦。它打开了一切,允许更多的多功能性..和更快速的开发。

    所以我对这个问题的看法是只推送和弹出视图控制器。也许有人会让我看起来很笨,但我只是使用这种方法已经取得了很大的成功。

    【讨论】:

      【解决方案3】:

      对于这种情况

      (NAV_A --root view controller -- VC1) -- 模态呈现 -- (NAV_B -- root view controller -- VC2 -- push -- VC3)

      如果您确实在 VC3 上弹出,您将始终到达 VC2,即它正下方的视图控制器。 通过 unwind,您可以执行上述操作,并且 一次性跳回 VC1

      Unwind 可以带您回到视图控制器层次结构中您想要但不会弹出的任何点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-18
        相关资源
        最近更新 更多