我啥时候应该使用导航控制器?

Posted

技术标签:

【中文标题】我啥时候应该使用导航控制器?【英文标题】:When I should use Navigation Controller?我什么时候应该使用导航控制器? 【发布时间】:2013-02-20 10:09:46 【问题描述】:

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

你能举个例子吗?

【问题讨论】:

【参考方案1】:

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

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

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

子视图控制器必须与 SHOW segues 连接 -- show segues 告诉导航控制器“这是父子关系”并导致预期的滑入-右转。 (要跳出层次结构,例如 Books → Login,请改用模态 segue。)

根视图控制器有一个导航栏,您可以向其中添加更多条形按钮,但子视图控制器没有,因为它是自动添加的。

FoodTracker 示例

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

FoodTracker Storyboard

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

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

显示现有的餐点是一种推送转场,但添加餐点是一种模式转场(新餐点不是向下钻取)。这很重要:不能只按添加餐食的原因是自动后退按钮(“

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

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

【讨论】:

就个人而言,我更喜欢您的回答,而不是接受的回答。有了具体的例子,就很容易理解了。 这确实很有帮助。它使导航控制器周围的很多事情变得更加清晰 - 非常感谢! 非常有帮助!我的印象是导航控制器将在任何地方使用。这为我省去了很多悲伤。【参考方案2】:

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

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

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

【讨论】:

你能举个例子或演示项目吗?谢谢你! 例如,假设您有一个带有身份验证的典型项目,并且应该保持连接打开,那么,将该连接作为属性存储在 NavigationController 中比传递它更好将出现的不同 UIViewControllers... 你能再深入解释一下吗? 我想显示一个表(前作者),当点击一行时它会转换到一个新表(前书)。并使用故事板!我是怎么做到的? You should stick to the "Model - View - Controller" paradigm... For example: in the first UITableViewController, when a row is selected you should implement "didSelectRow" and perform the segue programmatically setting the “prepareForSegue”中新 UITableViewController 的作者。然后,当在新的 UITableViewController 中接收到作者时,您应该获取书籍列表并更新您的 tableView...【参考方案3】:

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

【讨论】:

“导航控制器 -> UITableView 控制器 -> UITableView 控制器”和“导航控制器 -> UITableView 控制器 -> 导航控制器 -> UITableView 控制器”有什么区别 没有理由将视图控制器两次包装在导航控制器中。 我想显示一个表(前作者),当点击一行时它会转换到一个新表(前书)。那么有什么不同,当我通过情节提要设计时,我嵌入了“导航控制器 -> UITableView 控制器 -> UITableView 控制器”,另一个我嵌入了“导航控制器 -> UITableView 控制器 -> 导航控制器 -> UITableView 控制器”

以上是关于我啥时候应该使用导航控制器?的主要内容,如果未能解决你的问题,请参考以下文章

我啥时候应该在 Symfony 4.4 控制器中使用拒绝访问功能?

我啥时候应该使用“隐藏文本框”,啥时候应该使用(html 5)“数据属性”?

我啥时候打电话给我的班级控制器、经理或服务?

在这种情况下我应该使用导航控制器吗?

Quorum Vs Versioning,我啥时候应该使用啥?

子类化导航控制器有啥用? [关闭]