iPhone 的模态登录视图
Posted
技术标签:
【中文标题】iPhone 的模态登录视图【英文标题】:Modal LoginView with iPhone 【发布时间】:2011-06-24 17:51:39 【问题描述】:我有一个包含 TabController 的视图控制器。在此加载之前,我希望用户登录,以便我可以检查他们可以访问的内容。在我的 AppDelegate 中,机器人 rootViewController(带有选项卡)和 LoginViewController 被声明,它们也在 IB 中连接起来:
我的 AppDelegate 中有这个:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
// [window addSubview:[rootController view]];
[window addSubview:[loginViewController view]];
[self.window makeKeyAndVisible];
return YES;
我的计划是在验证后关闭登录表单并显示 rootController,但 rootController 会立即显示。我打算这样做:
-(IBAction)DidClickLoginButton:(id)sender
NotesAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[delegate.window addSubview:[delegate.rootController view]];
[self dismissModalViewControllerAnimated:YES];
有没有更简单的方法来做到这一点?我不明白为什么没有显示 LoginViewController。
编辑:最终通过将它添加到我的 AppDelegate 的 didFinishLaunchingWithOptions 方法中的 rootController 来实现此功能
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
// [window addSubview:[rootController view]];
[self.window makeKeyAndVisible];
LoginViewController *loginViewController =[[LoginViewController alloc] initWithNibName:@"LoginView" bundle:nil];
[self.rootController presentModalViewController:loginViewController animated:YES];
return YES;
【问题讨论】:
【参考方案1】:我认为实际上 100% 以编程方式而不是使用 Interface Builder 更容易。无论哪种方式,在application:didFinishLaunchingWithOptions:
中,您都想做这样的事情:
[rootViewController presentModalViewController:loginViewController animated:NO];
然后,在用户登录后,执行:
[rootViewController dismissModalViewControllerAnimated:YES];
【讨论】:
【参考方案2】:是的。当您在窗口上添加根控制器视图时,这将使它出现在所有视图之上(甚至在登录视图之上),然后您的登录视图在根视图后面消失,您看不到。
编辑: 一种方法是在开始时将登录控制器置于 root 之上(根视图控制器呈现登录视图),然后愉快地关闭登录视图。
【讨论】:
以上是关于iPhone 的模态登录视图的主要内容,如果未能解决你的问题,请参考以下文章