从 UITabBarController 选项卡根视图呈现 UINavigationController

Posted

技术标签:

【中文标题】从 UITabBarController 选项卡根视图呈现 UINavigationController【英文标题】:Present UINavigationController from UITabBarController tab root view 【发布时间】:2019-04-02 04:21:46 【问题描述】:

我想从标签栏控制器的标签的根视图控制器中展示一个导航控制器,并让标签栏控制器中的标签可见。

这是示例故事板的照片:

标签栏控制器与ItemOneViewController有关系,实现如下:

import UIKit

class ItemOneViewController: UIViewController 

  private func presentNavigationController() 

    let id = "NavController"
    guard let vc = storyboard?.instantiateViewController(withIdentifier: id) else  return 

    present(vc, animated: true)
  

  override func viewDidAppear(_ animated: Bool) 

    super.viewDidAppear(animated)
    presentNavigationController()
  

我希望通过在选项卡栏控制器上从选项卡的根视图控制器显示导航控制器,导航控制器将显示在选项卡后面,但是当我运行所描述的应用程序时,这就是模拟器的样子:

这是视图层次结构的样子:

我想我记得以前的一位同事提到 UINavigationController 将替换视图堆栈,这是有道理的,但无论如何要保留它或带上 UITabBarController 吗?

我尝试过调整演示风格和上下文,但没有任何运气。

【问题讨论】:

为什么不将 NavController 分配给 UITabBarController 根视图控制器? @NikunjKumbhani 因为要求是作为标签栏根控制器的视图控制器不是导航控制器。 请检查我的答案,您需要将 ItemOneViewController 与导航控制器一起嵌入,以便您可以将其与 UITabBarItem 以及 UINavigationController 一起使用b> 【参考方案1】:

尝试将您的 ItemOneViewController 嵌入到导航控制器中,而不是将您的 ViewController VC 嵌入到导航控制器中。

【讨论】:

@Fred Faust 为我们提供了一个代码示例。提供建议很好,但根据您的建议举个例子要好得多。请举例说明你的答案 @DerkJanSpeelman 感谢您的回答,但 ItemOneViewController 无法嵌入到导航控制器中【参考方案2】:

从情节提要中选择 ItemOneViewController

转到编辑器并嵌入导航控制器

您在 Storyboard 中的视图层次结构如下所示:

【讨论】:

感谢您的回答,但要求标签栏的根标签视图控制器不能是导航控制器。 @FredFaust 然后不可能在呈现的视图控制器中显示选项卡。如果您想使用底部标签栏导航到任何地方,则必须使用 NavigationController 嵌入。 我认为你是对的,我做我想做的唯一方法可能是将 ItemOne 嵌入导航控制器并隐藏它的导航栏,然后在没有动画的情况下为下一个推送VC 并在两者之间添加自定义过渡。 @FredFaust 是的,非常好

以上是关于从 UITabBarController 选项卡根视图呈现 UINavigationController的主要内容,如果未能解决你的问题,请参考以下文章

从单独的 UIViewController 切换 UITabBarController 选项卡[重复]

准备 Segue 到 UITabBarController 选项卡

如何识别从UITabBarController中的更多选项卡或单独选项卡单击视图控制器?

未选择选项卡时更改 UITabBarController 选项卡图标颜色

导航到 UITabBarController 上的某个选项卡

当 Master 是 UITabBarController 时,从 UISplitViewController Detail 转到 Master?