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 的模态登录视图的主要内容,如果未能解决你的问题,请参考以下文章

iPhone - 在另一个模态视图中嵌套当前模态视图

iPhone - 用另一个模态视图覆盖模态视图

iPhone:模态视图未关闭

显示模态视图时使 iPhone 状态栏消失?

iPhone:模态视图控制器的代表

呈现模态视图控制器时 iPhone 崩溃