在标签栏控制器中设置视图控制器

Posted

技术标签:

【中文标题】在标签栏控制器中设置视图控制器【英文标题】:Setting a view controller in a tab bar controller 【发布时间】:2014-08-20 20:36:13 【问题描述】:

我的应用有标签栏控制器,它在其 viewDidLoad 方法中加载 3 个视图控制器。

- (void)viewDidLoad

    [super viewDidLoad];
    ...
    [self setViewControllers:@[firstViewController,
                               secondViewController,
                               thirdViewController,
    ]];

我希望它显示一个不同于这三个控制器的视图控制器 (homeViewController)。首次加载选项卡栏时,不会选择这三个选项卡栏。我想通过按标签栏项目来更改它们,并通过按导航左栏按钮返回主视图。

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:btnImage
                                                                         style:UIBarButtonItemStylePlain
                                                                        target:self
                                                                        action:@selector(setHomeView)]; 

如何在第一次加载标签栏控制器而不将其添加到标签栏项目时显示 homeViewController?

【问题讨论】:

UITabBarController 不适合以这种方式使用。在大多数情况下,每个UITabBarController 本质上都会有自己的UINavigationController,因此也有自己的堆栈。这些选项卡都彼此分开。如果我去firstViewController,然后被推到另一个VC,然后单击第二个选项卡,我不再有导航左栏按钮返回主VC。您不能在 Home VC 上,然后转到 Tab 1,然后是 Tab 3,并且仍然有一个返回按钮可以返回到 home VC。重新考虑您的 UI/UX 流程。 所有这三个视图控制器都继承自同一个基类,因此它们具有相同的导航左栏按钮 但它们不会有相同的导航堆栈。 UITabBarController 旨在将 rootViewController 与 firstVC、secondVC、thirdVC 交换。它们中的每一个都有不同的导航堆栈,它们保留的唯一方法是你执行 self.navigationController.push。这样做的问题是我可以做到 -> HomeVC -> 1st -> 3rd -> 1st -> 3rd -> 1st -> 3rd -> 1st ->3rd。现在我必须按 9 次后退按钮才能返回主屏幕。这也会占用大量内存,并且您无法恢复之前可能拥有的任何堆栈。 我明白了。有没有其他方法可以实现这种导航? 说实话,大多数人只是将 HomeVC 添加到 UITabBarController 以解决此问题,因此他们可以执行 self.window.rootViewController = homeVC,firstVC,secondVC,thirdVC。否则,如果它只是一个登陆屏幕,他们就不会在乎一旦过去就能够返回它。 【参考方案1】:

标签栏控制器默认将 index0 处的第一个 ViewController 设置为主控制器。

如果您不希望应用程序的第一个 ViewController 存在于 tabBarController 中,那么您必须创建 HomeVC 并将其设置为应用程序的入口点,但选项卡栏不会出现在其中看法。

除非它位于这三个导航堆栈内的某个位置,否则无法在 TabBarController 内呈现视图控制器。

【讨论】:

但是我想在应用程序加载时显示标签栏。

以上是关于在标签栏控制器中设置视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何让自定义标签栏显示标签栏项目在 Xcode 中设置的选定图像?

如何在 Swift 的标签栏项目中设置图像?

如何在iphone中设置默认选中Tab bar item 1?

在 AppDelegate 中设置初始视图控制器时完全黑屏

在 Swift 的导航栏中设置图像

ios7 - 故事板 - 无法在我的视图控制器中设置导航栏