什么时候应该使用导航控制器?

时间:2013-02-20 10:09:47

标签: ios objective-c uinavigationcontroller segue

我不知道何时应该使用导航控制器而不是将segue与普通的View Controller一起使用? 如果使用segue,Modal和Push segue之间有什么区别?

你能举个例子吗?

3 个答案:

答案 0 :(得分:18)

简答:使用导航控制器" show"仅用于实现DRILL DOWN行为。

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

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

  • 子视图控制器必须与SHOW segues连接 - show segues告诉导航控制器"这是父子关系"并导致预期从右转过来的滑动。 (要跳到层次结构之外,例如,Books→Login,请使用模态segue。)

  • 根视图控制器有一个导航栏,您可以添加更多条形按钮,但子视图控制器不会,因为它会自动添加。

FoodTracker示例

现在可以解释Apple Start Developing iOS Apps (Swift)中FoodTracker教程的奇怪布局。 **第二个嵌套导航控制器的用途是什么?它只是一个简单的餐点列表:点击一顿饭以在膳食细节中显示它,或点击添加到和膳食细节变成添加膳食。

FoodTracker Storyboard

  • 第一个导航控制器使My Meals成为任意数量视图的向下钻取层次结构的根目录"推送"从那里开始(不需要进一步的导航控制器)。

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

  • 显示现有膳食是一种推动力,但添加膳食是一种模式(新的膳食不是下钻)。这一点很重要:Add Meal无法推送的原因是自动后退按钮("< My Meals")变得含糊不清:是保存还是取消?

因为"导航"和"推"这是非常笼统的术语,因为获得一个免费的后退按钮很不错,所以认为导航控制器可以从任何地方到任何地方,但这种行为仅用于分层遍历。

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

答案 1 :(得分:8)

根据我的经验,决定这类事情没有一般规则,这取决于你未来App的可用性......

导航控制器可以帮助用户记住他们在每个时刻的位置,以及他们如何回归,但如果你的等级太多,则无法使用最好的东西...更重要的是,如果你正在使用一个NavigationController或一个TabBarController,你有一个类,可以从所有其他ViewControllers访问,你可以在那里拥有一般的功能或数据......

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

答案 2 :(得分:3)

如果要启用后退按钮功能,可以使用导航控制器。您仍然使用“普通”视图控制器,只需将它们嵌入导航控制器即可。然后,您可以推送视图控制器并能够返回。