显示 UITabBar 而不使用 RootViewController

Posted

技术标签:

【中文标题】显示 UITabBar 而不使用 RootViewController【英文标题】:Show UITabBar without beeing RootViewController 【发布时间】:2014-03-04 09:03:55 【问题描述】:

我有一个 LoginViewController,它是 RootViewController。这个 ViewController 不应该包含 TabBar。 ViewController 的其余部分应该包含 UITabBar,但它没有显示。如果我将 tabBar 设为 rootController,它将在 viewcontrollers 中显示 tabBar。这也会使 firsttab 成为它不应该的 rootviewcontroller。

我的问题是,我怎样才能在没有 tabBar 的情况下使 loginview 成为 rootViewController 并且仍然在其他 viewcontrollers 中显示 tabBar?

我的代码:

tabBarController = [[UITabBarController alloc] init];

MenuViewController *firstTab = [[MenuViewController alloc] initWithNibName:@"MenuViewController" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:firstTab];


FixtureViewController *secondTab = [[FixtureViewController alloc] initWithNibName:@"FixtureViewController" bundle:nil];
UINavigationController *navController2 = [[UINavigationController alloc] initWithRootViewController:secondTab];

WorldCupViewController *thirdTab = [[WorldCupViewController alloc] initWithNibName:@"WorldCupViewController" bundle:nil];
UINavigationController *navController3 = [[UINavigationController alloc] initWithRootViewController:thirdTab];

LoginViewController *loginView = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
UINavigationController *navController4 = [[UINavigationController alloc] initWithRootViewController:loginView];



self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = @[navController, navController2, navController3];

navController.tabBarItem.image = [UIImage imageNamed:@"message-7"];
navController2.tabBarItem.image = [UIImage imageNamed:@"football-32"];
    navController3.tabBarItem.image = [UIImage imageNamed:@"trophy-32"];
[[UITabBar appearance] setTintColor:[UIColor colorWithRed:110/255.0f green:89/255.0f blue:196/255.0f alpha:1.0f]];

[self.window setRootViewController:navController4];
[self.window makeKeyAndVisible];

【问题讨论】:

用户登录后是否显示 TabBar? 是的,当用户登录时,它将推送到第一个选项卡(MenuViewController)。这个 MenuViewController 不会显示我在 appdelegate 中创建的 uitabbar 【参考方案1】:

您需要做的是将应用程序从 LoginViewController 转换到 Tabbar。我建议做的是用 TabBar 作为 rootViewController 替换 LoginViewController。

这是一些示例代码,在您的 AppDelegate 中执行此操作

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions


     LoginViewController *loginView = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
     UINavigationController *navController4 = [[UINavigationController alloc] initWithRootViewController:loginView];

     [self.window setRootViewController:navController4];
     [self.window makeKeyAndVisible];

     return YES;


-(void)transitionToTabBar


   // Set the TabBar how you are in your sample code, this is just an example.
   [self.window setRootViewController:[[UITabBarController alloc] initWithNibName:@"SomeNib" bundle:Nil]];

   [UIView transitionWithView:self.window duration:0.5f options:UIViewAnimationOptionTransitionCurlDown animations:^
      [self.window makeKeyAndVisible];
    completion:nil];

【讨论】:

没错,但现在它将以 menuViewController 作为 rootViewController 而不是 loginviewController @user3258468 不仅在 rootViewController 处设置 LoginViewController。用户登录后,您将向应用程序委托发送一条消息,以使用我向您展示的示例转换到选项卡栏。更新了我的答案。【参考方案2】:

您应该使用主视图控制器(用于 MenuViewController),并且通过使用 segue,您可以呈现另一个包含 TabBar 的视图控制器。

【讨论】:

以上是关于显示 UITabBar 而不使用 RootViewController的主要内容,如果未能解决你的问题,请参考以下文章

UItabbar 项目未显示情节提要参考

更改未选择的标签栏项目图像的颜色而不使其成为原始图像

在 iPhone SDK 中显示 UIPickerView 时隐藏 UITabBar

UITabBar 显示 UITabBarItem 图像忽略渲染模式 AlwaysOriginal

来自 UITabBar 的奇怪行为,其中背景颜色仅显示一个选项卡

UITabBar 保持 UIPickerView 的底部显示