在应用程序的所有视图控制器上显示标签栏

Show tab bar on all view controllers of application

我有问题,我在选项卡栏控制器上有 2 个视图控制器。这两个控制器都显示选项卡。但是,当我从 View controller 1 向 View controller 3 推送 segue 时。View controller 3 不显示选项卡栏。

我想在我的应用程序的所有控制器上显示选项卡。

你应该意识到你的观点结构。

现在,您首先有一个 NavigationController,它的根ViewController 是一个 Tab BarController。

NavigationController[0] = TabBarController

并且您的 TabBarController 有 2 个 ViewController(控制器 1 和控制器 2)

NavigationController[0] = TabBarController

然后它包括 2 个控制器,如

TabBarController[0] = Controller 1

TabBarController[1] = Controller 2

当你打电话给

self.navigationController.pushViewController

表示NavigationController推送到Controller 3, 所以控制器 3 不会显示标签栏,因为它不在 TabBarController 中。

如果你想推到控制器 3 并且仍然有标签栏, 您可以在 Controller 1 中插入一个容器(或插入一个 View ), 并像这样创建一个 NavigationController

let nav = NavigationController(rootViewController: yourController1)
self.yourViewInsertedInController1.addSubview(nav.view)

然后在你的Controller1中运行

self.navigationController.pushViewController

会好的。

更改故事板设计:

  • 将 TabBar 视图控制器设置为初始 ViewController

  • 将您的 UINavigationViewController 设置为每个选项卡的根视图控制器

  • 毕竟你的Design结构会像mention Image

您的问题存在是因为您的 UITabViewController 嵌入在您初始化为初始控制器的导航堆栈中。

您必须重新构建,以便您的选项卡栏控制器选项卡打开到新的导航堆栈。

  • 删除第一个 UINavigationController ,你不需要它(如果你想要它不要使用推送转场,使用模态转场,然后你就不会再引用那个 UINavigationController 的 viewController 堆栈来自 在你的 UITabViewController
  • 里面
  • 将前 UIViewControllers 中的每一个嵌入到您的 UITabViewController 在单独的 UINavigationController.
  • 里面

现在您可以在 UITabViewController's 选项卡中推送 segue

要将视图控制器添加到选项卡栏控制器的视图控制器数组,请从选项卡栏控制器拖动到该视图控制器,同时按住 Control 键。 Select 关系 Segue > 从出现的菜单中查看控制器。