功能差异,UINavigationController vs Only Storyboard Segue

Functional difference, UINavigationController vs Only Storyboard Segue

因此 UIKit Framework ReferenceUINavigationController 描述为向用户呈现数据和视图的有效方式。但我很好奇使用 UINavigationController VS SegueOnly.

之间的性能和可管理性差异

肯定存在某些情况,一个比另一个更适合。我完全不熟悉编码,但本能地我认为 UINavigationController 更适合呈现 VC,每个 VC 都有很多事情要做,用户在每个 VC 上花费很多时间,或者多个 VC的需要同时为运行和保存数据。 Segue 更适用于单向 VC 进展或短期使用、低数据 VC 演示。这些假设是否正确?

实施 UINavigationController 的优点是什么?

这是 ApplesSocket-wrenches 的比较。导航控制器与 segue 甚至不是一个选项。他们不担任相同的角色。您可以在使用或不使用 segue 的情况下使用导航控制器。您可以在有或没有导航控制器的情况下使用 segues。

A UINavigationController 是一种特定类型的视图控制器。具体来说,它是为控制视图控制器的导航堆栈而设计的。当用户在您的应用程序中向前移动时,您将其他视图控制器添加到此导航堆栈(通过 segues 或通过视图控制器上可用的其他方法来呈现其他视图控制器)。同时,导航控制器允许您从堆栈中“弹出”控制器,然后我们返回到前一个视图控制器。

当我们将 UINavigationController 与事物进行比较时,我们应该将其与 UITabBarControllerUISplitViewControllerUIPageViewController 等事物进行比较。这些是其他类型的视图控制器,它们控制用户在我们的应用程序中导航的方式。

Segue 作为一种从一个视图控制器转到另一个视图控制器的方式而存在。但是我刚刚列出的各种控制器作为控制控制器之间导航关系的一种方式存在。

如果您使用故事板来构建您的应用程序,我强烈建议您使用 segues。是否使用导航控制器完全取决于您希望应用程序导航的工作方式。


也许一些图片可以更清楚地区分?

图表 A

这里我们有两个视图控制器。没有导航控制器,什么都没有。只是两个普通的控制器。视图控制器之间带有箭头的线是 segue。 segue 定义了视图控制器之间的关系,使我们可以从左侧的视图控制器转到右侧的视图控制器。

图表 B

这里我们有一个导航控制器,后面是两个视图控制器。导航控制器(最左边)和第一个视图控制器(中间)之间的线是不是 segue。但是,它确实定义了导航控制器和视图控制器之间的关系。它将视图控制器定义为导航控制器的 root 视图控制器。每当我们呈现这个导航控制器时,它会依次将这个视图控制器呈现为其导航堆栈中的第一个控制器。然而,第一个视图控制器(中间)和第二个视图控制器(最右边)之间的线 一个 segue。它与展览 A 中的 segue 相同(除了展览 A 可能是不同的 type 的 segue)。这个 segue 定义了第一个和第二个视图控制器之间的关系,并为我们提供了从第一个到第二个的方法。

图表 C

这里我们有一个标签栏控制器(最左边)和四个视图控制器。我们还有更多的线路连接这些东西。导航控制器示例中的很多行,选项卡栏控制器和视图控制器之间的行不是 segues,但它们确实定义了选项卡栏控制器和视图控制器之间的关系。这些行将视图控制器分配为选项卡栏控制器的 viewControllers 数组的一部分,该数组确定要显示的选项卡。然而,左视图控制器和右视图控制器之间的线是 segue,与前两个示例完全相同。


segue 没什么 只不过是一种定义故事板上两个视图控制器之间的导航关系的方法。如果你不使用故事板,你也根本不会使用 segues,但你仍然可以让你的应用程序以完全相同的方式导航(这一切都可以在没有故事板和没有 segues 的情况下以编程方式实现——而且我不要认为它会影响表演或其他表演)。

是否使用导航控制器是另一个问题,而且是一个完全独立的问题。是否使用导航控制器与是否使用 segues 甚至不在同一个球场。使用导航控制器也不是性能问题。使用导航控制器的开销非常小。它的大部分开销可能来自它添加的 UI 东西......但是如果你想要 UI 东西,那么无论你是否有导航控制器,你都会有这些开销。

重要的是,是否使用 segues 不是性能问题——这只是您是否使用故事板设计应用程序的问题。同样重要的是,使用导航控制器不是性能问题——而是您希望应用程序导航的外观和感觉如何的问题。 “导航控制器是否适合您的应用程序?”这实际上是您在决定是否使用导航控制器时必须回答的唯一问题。