一起使用 UITabBarController 和 UINavigationController

Posted

技术标签:

【中文标题】一起使用 UITabBarController 和 UINavigationController【英文标题】:Using a UITabBarController and a UINavigationController together 【发布时间】:2015-02-14 05:42:44 【问题描述】:

在标签栏视图之后单击视图时,使用 2 个标签的最佳做法或好方法是什么?

我是否为每个选项卡创建一个 UINavigationController?

标签栏是这样创建的:

// Create the tab bar text and images
AViewController *viewA = [[AViewController alloc] init];
BViewController *viewB = [[BViewController alloc] init];

UITabBarItem *tabA = [[UITabBarItem alloc] initWithTitle:@"A" image:[UIImage imageNamed:@"a.png"] tag:1];
UITabBarItem *tabB = [[UITabBarItem alloc] initWithTitle:@"B" image:[UIImage imageNamed:@"b.png"] tag:2]

viewA.tabBarItem = tabA;
viewB.tabBarItem = tabB;

NSArray* controllers = [NSArray arrayWithObjects:viewA, viewB, nil];
self.viewControllers = controllers;

【问题讨论】:

是的,每个标签中都有单独的UINavigationController。每个选项卡都位于独立的视图控制器堆栈中。它们不应共享任何视图控制器层次结构。通常我会拖出一个“标签栏控制器”和两个“导航控制器”并将两个导航控制器连接为标签栏控制器的子视图控制器。 【参考方案1】:

对于导航,您需要像这样为每个创建 UINavigationController

更新:立即尝试

AViewController *viewA = [[AViewController alloc] init];
BViewController *viewB = [[BViewController alloc] init];

UINavigationController *navA = [[UINavigationController alloc]initWithRootViewController:viewA];
UINavigationController *navB = [[UINavigationController alloc]initWithRootViewController:viewA];

UITabBarItem *tabA = [[UITabBarItem alloc] initWithTitle:@"A" image:[UIImage imageNamed:@"a.png"] tag:1];
UITabBarItem *tabB = [[UITabBarItem alloc] initWithTitle:@"B" image:[UIImage imageNamed:@"b.png"] tag:2]

tabA.tabBarItem = tabA;
tabB.tabBarItem = tabB;

NSArray* controllers = [NSArray arrayWithObjects:navA, navB, nil];
self.viewControllers = controllers;

试试这个

【讨论】:

如果标签栏不在 appDelegate 中怎么办? 没关系,但是这里需要为下一个控制器创建uitabbarcontroller

以上是关于一起使用 UITabBarController 和 UINavigationController的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 iOS 中将 UITabBarController 与 UITableViewController 一起使用时出现异常

将 UITabBarController 与内部 UINavigationControllers 一起使用时如何共享 ManagedObjectContext

UITabBarController的基本原理及使用

让 UITabBarController 与核心数据一起工作

如何在没有 UITabBarController 的情况下使用 UITabBar

Obj-C, UINavigationControllers inside a UITabbarController,简单解释一下?