我正在做一个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控制器完成时,标签栏控制器就会启动,好像它之前没有任何其他视图一样。提前谢谢!
答案 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];