展开segue和弹出视图控制器之间有什么区别?

5
我正在开发的应用需要实现一个工作流程,允许用户在表单中输入信息。我计划将其分解为多个独立的视图控制器,并由导航控制器进行管理,而不是使用滚动视图。我首先在故事板中布置了所有的表单片段,然后开始连接所有不同部分表单的推送和返回segue。
我的问题是,使用所有这些推送和返回segue是否比仅使用我的导航控制器的pushViewController和popToViewController方法以及跳过故事板更好?在内存管理或性能方面有任何区别吗?只使用push和pop是否更好的做法,以便设计和可维护性?我在文档中找不到任何相关内容。
3个回答

4

从它们所做的事情来看,基本上没有任何区别。使用“unwind”方法的好处是可以将数据传回到您要取消的控制器中。如果使用“pop”方法,则必须创建委托协议来实现此操作。但这很大程度上是主观的。您可以使用更适合自己的方法。我喜欢使用故事板,因为它使得查看控制器之间的关系变得容易。使用故事板可能会有问题(至少我听说过)当您在一个大团队中工作时,所以这也是需要考虑的。


关于将数据传回父视图控制器的观点很好。我记得在使用推送/弹出时感受到了它的影响,但并不反对使用协议/委托模式来实现。此外,混合使用这些方法也可能是可行的,不是不可以考虑。 - Cameron Askew
@CameronAskew,没问题,混合使用是完全可以的。另一个使用 unwind 的场景是当你有一组控制器层级,这些控制器通过模态展示和推送方式放在屏幕上时,使用 pop 和 dismiss 的组合返回可能会很复杂,但使用 unwind 则非常简单。 - rdelmar
@rdelmar 是的,它们的作用是不同的。Unwind 可以将您带回到任何父控制器(跨越任何推送和模态组合),但是 pop 只会从导航堆栈中删除当前控制器。 - BangOperator

1

这是一个很好的问题。

在我的第一个iOS项目中,我遵循了在线教程并使用了Storyboard Segue等。在我的第二个iOS项目中,我放弃了这种方式,只是推送和弹出视图控制器。

实际上,我发现这种方式更加清晰,因为使用Storyboard的方式需要调用performSegueWithIdentifier,然后通过与prepareForSegue同步来准备接收视图控制器。既然可以在一个地方准备一个视图控制器并推送它,为什么要这样做呢?

此外,这种方法将视图控制器与转换解耦。它打开了一切,并允许更多的灵活性和更快的开发。

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


0

针对这种情况

(NAV_A --根视图控制器-- VC1) --以模态方式呈现-- (NAV_B -- 根视图控制器-- VC2 -- 推入 -- VC3)

如果您在VC3中进行弹出操作,您将始终到达VC2,即其下方的视图控制器。 使用unwind,您可以像上面所做的那样,并且一次性跳回VC1。

Unwind可以带您回到视图控制器层次结构中的任何想要的位置,但是pop不行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接