首页 文章

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

提问于
浏览
46

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

UINavigationControllerHomeViewController 为根 . HomeViewController 有一个 Show (e.g. Push) UITabBarController 的按钮 . UITabBarController 有4 UIViewControllers .

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

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

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

3 回答

  • 136

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

    / --> `NavController` --> `ViewController1`
                                             | --> `NavController` --> `ViewController2`
    `HomeViewController`-->`TabBarController`|--> `NavController` --> `ViewController3`
                                             \--> `NavController` --> `ViewController4`
    
    • 转到 Editor - > Embed In - > Tab Bar Controller (或导航控制器)

    How to embed correctly

    回答你的问题:

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

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

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

  • 18

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

    • UITabBarNavigationController 选择正在用作"tab"的UIViewController

    • 在顶部Xcode菜单上,选择"Editor" - >

    • "Embed In" - >

    • “导航控制器”

    enter image description here

  • 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) ,再次运行 - >它应该工作 .

相关问题