在选项卡栏控制器之前显示一个login屏幕

我正在做一个Twitter应用程序,并在AppDelegate -didFinishLaunchingWithOptions我使用下一代码加载login视图如果NSUserDefaults对象是空的:

NSUserDefaults * prefs = [NSUserDefaults standardUserDefaults];

 NSString *test = [prefs objectForKey:@"username"]; if (test == @"(null)" || test == nil) { LoginScreenViewController *login = [[LoginScreenViewController alloc] initWithNibName:@"LoginScreenViewController" bundle:nil]; [self.window addSubview:login.view]; [self.window makeKeyAndVisible]; } else { [self.window addSubview:tabBarController.view]; [self.window makeKeyAndVisible]; } 

而且我可以加载login视图,但是我怎么解雇呢? login屏幕必须在加载tabBarController之前显示出来,所以当login控制器完成时,标签栏控制器就开始了,就像之前没有任何其他视图一样。 提前致谢!

你可以加载你的标签栏相同,如果用户login或不(你的if语句的第二部分)

如果用户没有login,则可以将您的LoginScreenViewController显示为模式视图控制器。 这将位于标签栏控制器上方。

就像是

 [self.window addSubview:tabBarController.view]; [self.window makeKeyAndVisible]; NSString *test = [prefs objectForKey:@"username"]; if (test == @"(null)" || test == nil) { LoginScreenViewController *login = [[LoginScreenViewController alloc] initWithNibName:@"LoginScreenViewController" bundle:nil]; [tabBarController presentModalViewController:login animated:YES]; } 

我不确定这是否会解决您的问题,但不要使用==进行string比较。 使用NSString类的compare:方法。

 if ([myNSStringObject compare:anotherNSStringObject] == NSOrderedSame) { //proceed with processing based on resultant matched strings } else { //proceed with processing based on resultant non-matched strings } 

不知道这是否会有所作为,但随着程序变得越来越复杂,您可能会遇到麻烦,不这样做。

当login完成呼叫时:

 [login.view removeFromSuperview]; [self.window addSubview:tabBarController.view]; 

应该只有一个属于UIViewController的UIView添加到窗口中,但是如果删除该视图,则可以添加另一个。

你可以提供loginview作为模型popup。 这是我正在做的。

  loginView = [[[LoginViewController alloc] initWithNibName:@"LoginView" bundle:nil] autorelease]; UINavigationController* nav = (UINavigationController*)[tabBarController.viewControllers objectAtIndex:0]; loginView.navC = nav; [nav presentModalViewController:loginView animated:YES];