使用iPhone的Modal LoginView

时间:2011-06-24 17:51:39

标签: iphone ios ios4 modalviewcontroller

我有一个包含TabController的viewcontroller。在加载之前,我希望用户登录,以便我可以检查他们有权访问的内容。在我的AppDelegate,bot中,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];
}

iNotesAppDelegate 有更简单的方法吗?我看不出为什么没有呈现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;
}

2 个答案:

答案 0 :(得分:1)

我认为以编程方式100%而不是使用Interface Builder实现更容易。无论哪种方式,在application:didFinishLaunchingWithOptions:中,您都希望执行以下操作:

[rootViewController presentModalViewController:loginViewController animated:NO];

然后,在用户登录后,执行:

[rootViewController dismissModalViewControllerAnimated:YES];

答案 1 :(得分:0)

是的。当您在窗口中添加根控制器视图时,这将使其显示在最重要的位置(甚至在登录视图上方),然后您的登录视图将在根视图后面被忽略,这是您无法看到的。

编辑: 其中一种方法是在开始时将登录控制器置于root之上(根视图控制器呈现登录视图),然后愉快地关闭登录视图。