显示 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的主要内容,如果未能解决你的问题,请参考以下文章
在 iPhone SDK 中显示 UIPickerView 时隐藏 UITabBar
UITabBar 显示 UITabBarItem 图像忽略渲染模式 AlwaysOriginal