在 UINavigationController 内的 UITabBarcontroller 中添加 UINavigationController?

Posted

技术标签:

【中文标题】在 UINavigationController 内的 UITabBarcontroller 中添加 UINavigationController?【英文标题】:Adding a UINavigationController in a UITabBarcontroller inside of a UINavigationController? 【发布时间】:2013-12-04 01:02:46 【问题描述】:

我的应用程序的整个导航系统都是围绕导航控制器构建的。我所有的 vc 都被推入和推出。我有一个从左侧出来的菜单系统“抽屉”,它是我的自定义导航控制器的一部分。在菜单中,我可以访问应用程序的多个区域。其中一些区域导致需要 TabBarController。当我到达那个 TabBarController 时,它有 2-4 个选项卡,每个选项卡都是它自己的 VC。每个选项卡上都有可以按下的内容,这将导致将新页面推送到导航控制器上。

我知道您应该将导航控制器嵌入到 TabBarController 中,但是当我的整个应用程序基于导航控制器并且某些页面包含 TabBarControllers 时,我该怎么做呢?

我尝试让我的应用程序以导航控制器开始,然后在标签栏所在的页面上,我将每个标签连接到一个新的导航控制器,然后该导航控制器遍历内容。这样做会在应用程序中添加非常意想不到的问题以及多个标签栏。

设置这样的东西的最佳方法是什么?请记住,我实际上从未以允许您“返回”的方式将 tabbarcontroller 推到我的导航控制器上。它们是基本页面,允许用户从中导航。

【问题讨论】:

能不能把tab view作为整个app的root view,然后每个tab的root view都是一个导航控制器? @nhgrif 我确实看过那个方法,但遇到了一些问题。如果我将整个应用程序嵌入到 TabBarController 中,它只会从一个选项卡开始,它是初始导航控制器。我在某些页面上只有一个标签栏,而这些页面有多个标签。这意味着在大多数情况下,我需要隐藏我的标签栏,但我怎么能只在某些页面上显示标签栏,然后有多个标签呢?就像我说的那样,我的应用程序有一个“抽屉”菜单系统,所以在标签栏页面上,导航栏中有一个菜单项。这需要在所有选项卡上都可以访问。 【参考方案1】:

您似乎将视图控制器与视图控制器容器混淆了。

TabBar 和 Navigation Bar 是 UIViewController 容器,与它们拥有的普通 UIviewcontroller 不同 将回调/委托转发到其子视图控制器的附加功能。 (如 viewDidAppear、shouldAutoRotate 等)

有什么区别? UIViewController 处理嵌入式视图的旋转,而 Container 处理嵌入式视图控制器的旋转。

这里是apple's 链接以及其他信息

您似乎是在彼此之上添加根视图的视图控制器。而是使用方法

-(void)addViewController:(UIViewController*)vc toViewController:(UIVIewController*)baseVC [vc willMoveToParentViewController:baseVC]; [baseVC addChildViewController:vc]; [baseVC.view addSubview:vc.view]; [vc didMoveToParentViewController:baseVC];

有了这个你可以嵌套 UIViewcontrollers 直到 n 的深度。不仅是 3 个级别(这是你的情况)

现在在你的上下文中:

[self addViewController:tabBarController toViewController:rootNavigationController]; [self addViewController:childnNvigationController toViewController:tabBarController];

【讨论】:

以上是关于在 UINavigationController 内的 UITabBarcontroller 中添加 UINavigationController?的主要内容,如果未能解决你的问题,请参考以下文章

在 UINavigationController 内的 UITabBarcontroller 中添加 UINavigationController?

从嵌入在 UINavigationController 中的一个视图控制器到另一个 UINavigationController

(Swift) 在嵌套在 Main UINavigationController 中的 UINavigationController 和 UITabController 之间切换

关闭 UINavigationController 并呈现另一个 UINavigationController

带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller

UINavigationController 标题和按钮