我在我的应用程序中实现了Tab栏控制器。但我的第一页是登录视图。所以,我不想在它上面显示标签栏。我通过隐藏该视图上的标签栏来完成此操作。
但是现在,当我选择第一个标签时,它总是作为登录页面进入根视图控制器。
//for home tab..
UINavigationController *nav1 = [[UINavigationController alloc] init];
UIViewController *viewController1;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
viewController1 = [[[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil] autorelease];
} else
{
viewController1 = [[[LoginViewController alloc] initWithNibName:@"LoginViewController_iPad" bundle:nil] autorelease];
}
nav1.viewControllers = [NSArray arrayWithObjects:viewController1, nil];
//for account tab...
UINavigationController *nav2 = [[UINavigationController alloc] init];
UIViewController *viewController2;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
viewController2 = [[[AccountView alloc] initWithNibName:@"AccountView_iPhone" bundle:nil] autorelease];
} else
{
viewController2 = [[[AccountView alloc] initWithNibName:@"AccountView_iPad" bundle:nil] autorelease];
}
nav2.viewControllers = [NSArray arrayWithObjects:viewController2, nil];
//for links tab...
UINavigationController *nav3 = [[UINavigationController alloc] init];
UIViewController *viewController3;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
viewController3 = [[[LinksView alloc] initWithNibName:@"LinksView_iPhone" bundle:nil] autorelease];
} else
{
viewController3 = [[[LinksView alloc] initWithNibName:@"LinksView_iPad" bundle:nil] autorelease];
}
nav3.viewControllers = [NSArray arrayWithObjects:viewController3, nil];
//for about us tab...
UINavigationController *nav4 = [[UINavigationController alloc] init];
UIViewController *viewController4;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
viewController4 = [[[AboutUsView alloc] initWithNibName:@"AboutUsView_iPhone" bundle:nil] autorelease];
} else
{
viewController4 = [[[AboutUsView alloc] initWithNibName:@"AboutUsView_iPad" bundle:nil] autorelease];
}
nav4.viewControllers = [NSArray arrayWithObjects:viewController4, nil];
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:nav1,nav2,nav3,nav4,nil];
self.tabBarController.tabBar.tintColor = [UIColor blackColor];
//self.tabBarController.tabBar.tintColor = [UIColor colorWithRed:237.0/255.0 green:208.0/255.0 blue:0.0/255.0 alpha:1.0];
self.window.rootViewController=self.tabBarController;
我该如何解决这个问题?
答案 0 :(得分:0)
只需将视图控制器分配给UINavigationController
,如下所示。
UINavigationController *nav1 =[[UINavigationController alloc]initWithRootViewController:viewController1];
UINavigationController *nav2 =[[UINavigationController alloc]initWithRootViewController:viewController2];
UINavigationController *nav3 =[[UINavigationController alloc]initWithRootViewController:viewController3];
UINavigationController *nav4 =[[UINavigationController alloc]initWithRootViewController:viewController4];
然后在tabbar中分配,就像你的代码一样..
self.tabBarController.viewControllers = [NSArray arrayWithObjects:nav1,nav2,nav3,nav4,nil];
self.window.rootViewController = self.tabBarController;
答案 1 :(得分:0)
查看this解决方案
基本上,您可以在用户登录后将rootViewController
从loginVC
切换到tabBarVC
。但我认为loginVC
不应该是你tabBarVC
的“第一页”,而是shuold是一个独立的viewController。
但是如果你想要在第一个标签中登录,你可以在用户登录后更改VC的视图。
您可以在NSUserDefaults中设置一个标志,以便知道用户是否已在第一个标签的viewDidAppear:
中记录,您可以检查用户是否已登录并显示不同的用户界面。
ps:你可以找到一个小技巧,不写下为iPhone / iPad here加载不同xib的所有条件。
答案 2 :(得分:0)
您必须使用其他方式在没有 tabBarController 的情况下显示您的Loginview
不要在 tabBarController 上使用LoginView
您必须选择一个布尔值,如 login 。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSUserDefaults *default=[NSUserDefaults standardUserDefaults];
if(![default boolForKey:@"login"])
{
//here tab is your tabBarController.
[tab presentViewController:yourLoginView animated:YES completion:nil];
}
else{
//your normal code
}
用户登录后,您可以设置login = YES。