当我应该使用导航控制器?

我不知道什么时候应该使用导航控制器,而不是在正常的View Controller中使用segue? 如果使用segue,Modal和Push segue有什么不同?

你可以给我一个例子吗?

简短的回答: 使用带有“show”的导航控制器只能实现DRILL DOWN行为。

例如,导航控制器→作者→书籍→书籍

  • 对于“根”(作者)下的每个级别,导航控制器自动添加标题栏和后退button。 所以在Books上,后退button被自动命名为“<Authors”。

  • 子视图控制器必须连接SHOW segues – 显示segues告诉导航控制器“这是一个亲子关系”,并导致预期的幻灯片从右转换。 (跳转到层次结构之外,例如,Books→Login,请使用模式segue。)

  • 根视图控制器有一个导航栏,您可以添加更多的栏button,但子视图控制器没有,因为它是自动添加的。

FoodTracker例子

现在,可以解释Apple 开始开发iOS应用程序(Swift)中的FoodTracker教程的奇怪布局。 **第二个嵌套的导航控制器是怎么回事? 这只是一个简单的膳食列表:点击一顿饭,以显示在膳食细节,或点击添加到和膳食细节成为添加餐。

FoodTracker故事板

  • 第一个导航控制器让“我的餐食”成为任何数量的“推送”视图的下钻层次的根源(不需要进一步的导航控制器就可以这么做)。

  • 但是,餐点细节用于显示现有餐点和添加新餐点。 要添加新的用餐,需要取消和保存button。 第二个导航控制器允许通过将Meal Detail作为根来添加这些button(参见上面的第三点)。

  • 显示一个现有的食物是一个推迟的过程,但添加一顿饭是一种模式(一种新的食物不是一个深入研究)。 这很重要:Add Meal不能被推到的原因是自动返回button(“我的餐”)变得模糊不清:保存还是取消?

因为“导航”和“推”是非常普遍的术语,并且由于获得一个免费的后退button非常好,所以想要导航控制器要从任何地方到任何地方,但是这种行为只是为了分层遍历。

(这是一个古老的问题,但我也作为一个iOS n00b困惑,就像OP,我仍然有问题。)

根据我的经验,没有一个通用的规则来决定这种事情,这取决于你的未来应用程序的可用性。

导航控制器可以帮助用户记住他们在每个时刻的位置,以及他们如何返回,但如果您有太多关卡,则不能成为最好的select……更重要的是,如果您使用的是NavigationController或一个TabBarController,你有一个类,可以从所有其他ViewControllers,你可以有一般的function或数据访问…

模态和push segue之间的区别是,首先你将总是返回到父视图控制器,因为你只是在顶部显示新的信息,而在推一个你正在replace一个ViewController与其他…

当您想启用后退buttonfunction时,您使用导航控制器。 您仍然使用“普通”视图控制器,您只需将其embedded到导航控制器中即可。 然后,你可以推视图控制器,并能够回去。