如何正确实现带导航控制器的标签栏控制器

时间:2014-12-11 11:41:50

标签: ios uinavigationcontroller uitabbarcontroller xcode6 uistoryboard

我正在使用Storyboard和Xcode 6.我的故事板中有下一个控制器和场景:

UINavigationController为根的

HomeViewControllerHomeViewController有一个Show (e.g. Push) UITabBarController按钮。 UITabBarControllerUIViewControllers

但我的问题是,在我显示UITabBarController后,4 UIViewControllers中没有导航栏。但我认为如果我Show (e.g. Push) UITabBarController那么它应该有嵌入式导航控制器,它是故事板中的初始控制器。我对吗?如果是这样,我如何在Storyboard中设置导航栏,因为我在故事板上看到的推送标签栏中现在有默认栏事件。我选择了UIViewController并将身份检查器中的模拟指标设置为Top属性的Translucent Navigation bar,但我认为它应该自动添加到此控制器和标签栏而无需其他步骤。

或者我应该为每个具有根视图控制器的标签栏项添加新的导航控制器吗?

主要问题为什么我没有使用show(例如Push)在故事板中看到导航栏。例如,如果我添加导航控制器然后设置为根 - 标签栏控制器,那么Xcode会自动添加顶部导航栏,但如果队列有一个额外的步骤,就像在我的情况下HomeViewController一样,顶部导航栏永远不会自动出现。

3 个答案:

答案 0 :(得分:136)

您好需要在自己的导航控制器中嵌入标签栏内的每个视图控制器。所以流程是这样的(HomeVC嵌入在它自己的NavController中):

                                         / --> `NavController` --> `ViewController1`
                                         | --> `NavController` --> `ViewController2`
`HomeViewController`-->`TabBarController`|--> `NavController` --> `ViewController3`
                                         \--> `NavController` --> `ViewController4`
  1. 转到编辑 - > 嵌入 - > 标签栏控制器(或导航控制器)
  2. How to embed correctly

    回答你的问题:

      

    标签栏控制器界面的每个标签都与自定义(不同的[sic])视图控制器相关联。当用户选择特定选项卡时,选项卡栏控制器将显示相应视图控制器的根视图,替换以前的任何视图。

    因此选项卡的Root View Controller必须连接到导航控制器;导航视图控制器必须是下一个内联,以便View Controller继承导航。选项卡栏将视图切换为下一个内联的内容。

    本文档将帮助您概述有关它的更多信息。 https://developer.apple.com/documentation/uikit/uitabbarcontroller

答案 1 :(得分:18)

在Swift 2中,Xcode 7有一个非常方便的功能,可以添加UINavigationController:

  1. 选择用作UITabBarNavigationController
  2. “标签”的UIViewController
  3. 在顶部Xcode菜单上,选择“编辑器” - >
  4. “嵌入” - >
  5. “导航控制器”

    enter image description here

答案 2 :(得分:1)

如果你想拥有这样的东西:

例如

TabBarController -> Navigation Controller -> View Controller with a Table View -> and from the TableView a MasterDetailView

我遇到的问题是MasterDetailView中没有导航(没有使用TableView的ViewController的后退按钮)。

解决方法是:

将TableView和MasterDetailView之间的Segue设置为: Kind: Push (Deprecated)

运行您的应用...希望您会看到后退按钮...将种类更改为Show (e.g. Push),再次运行 - >它应该工作。