在标签栏控制器之前显示登录屏幕

时间:2011-05-17 17:45:26

标签: iphone cocoa-touch ios

我正在做一个Twitter应用程序,并且在AppDelegate -didFinishLaunchingWithOptions我正在使用下一个代码来加载登录视图,如果该对象上的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];
}

我可以加载登录视图,但那我该怎么解雇呢?登录屏幕必须在加载tabBarController之前显示,因此当Login控制器完成时,标签栏控制器就会启动,好像它之前没有任何其他视图一样。提前谢谢!

4 个答案:

答案 0 :(得分:1)

如果用户已登录,您可以加载标签栏(if语句的第二部分)

如果用户未登录,您可以将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];
}

答案 1 :(得分:1)

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

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

不确定这是否会产生影响,但随着程序变得更加复杂,您可能会遇到麻烦而不这样做。

答案 2 :(得分:0)

登录完成后,呼叫:

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

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

答案 3 :(得分:0)

您可以将loginview显示为模式弹出窗口。 这就是我在做的事。

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