21

我不知道什么时候应该使用导航控制器而不是使用 segue 和普通视图控制器?如果使用 segue,Modal 和 Push segue 有什么不同?

你可以给我一个例子吗?

4

3 回答 3

23

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

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

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

  • 子视图控制器必须与 SHOW segues 连接——show segues 告诉导航控制器“这是父子关系”并导致预期的从右侧滑入过渡。(要跳出层次结构,例如,书籍→登录,请改用模态转场。)

  • 根 View Controller 有一个导航栏,您可以向其中添加更多栏按钮,但子 View Controller 没有,因为它是自动添加的。

FoodTracker 示例

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

FoodTracker 故事板

  • 第一个 Navigation Controller 使 My Meals 成为向下钻取层次结构的根,用于从那里“推送”的任意数量的视图(不需要进一步的 Navigation Controller 来执行此操作)。

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

  • 显示现有的餐点是一种推送选择,但添加餐点是一种模态选择(新餐点不是向下钻取)。这很重要:不能只按添加餐食的原因是自动后退按钮(“<我的餐食”)变得不明确:它是保存还是取消?

因为“导航”和“推送”是非常笼统的术语,并且因为获得免费的后退按钮很好,所以很容易认为导航控制器可以从任何地方移动到任何地方,但该行为仅用于分层遍历。

(这是一个老问题,但作为 iOS n00b,我也对此感到困惑,就像 OP 一样,我仍然有问题。)

于 2015-12-07T22:39:33.330 回答
8

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

导航控制器帮助用户记住他们在每一刻的位置,以及他们如何返回,但如果你有太多的关卡,这不是最好的选择......更重要的是,如果你使用的是 NavigationController 或一个 TabBarController,你有一个类,可以从所有其他 ViewController 访问,你可以在其中拥有一般功能或数据......

modal 和 push segue 之间的区别在于,在第一个过程中,您将始终返回父 ViewController,因为您只在顶部显示新信息,而在 push 中,您将一个 ViewController 替换为另一个...

于 2013-02-20T10:15:43.323 回答
3

当您想要启用后退按钮功能时,您可以使用导航控制器。您仍然使用“普通”视图控制器,只是将它们嵌入导航控制器中。然后,您可以推送视图控制器并返回。

于 2013-02-20T10:13:03.837 回答