启动时在视图控制器上显示模态视图控制器

时间:2015-01-07 09:35:46

标签: ios objective-c iphone modalviewcontroller appdelegate

在我的AppDelegate.m中,我有以下代码在启动时为用户设置初始视图控制器,具体取决于是否存在密钥链中的凭据。

如果用户确实存储了凭据,则应用程序将使用故事板ID balancescreen实例化主用户界面。这适用于下面的代码。

如果用户没有存储凭据,我想在{{1}的顶部显示带有故事板ID,loginscreen模态的登录视图控制器输入正确的凭据后,视图控制器将被解除(我已经处理过了),用户显示了主界面。 这是我需要帮助的,找到一个解决方案来做到这一点,而不会使应用程序出现故障。

这是我目前的代码:

balancescreen

编辑:这是我的故事板设置:

enter image description here

2 个答案:

答案 0 :(得分:1)

请勿更改应用程序中的rootViewController。使rootViewController接收导航到登录或应用程序的请求。

更改窗口的rootViewController是不好的做法,因为您需要手动执行动画。故事板流程如下所示:

Storyboard

答案 1 :(得分:-1)

试试这个:

if (password.length > 0) {

    self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"balancescreen"];

    self.window.rootViewController = viewController;
    [self.window makeKeyAndVisible];


} else {

    // go on as before
    self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"balancescreen"];

    // instantiate the LoginViewController
    LoginViewController *loginViewController = [storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"];

    self.window.rootViewController = viewController;
    [self.window makeKeyAndVisible];

    // present the LoginViewController modoally with viewController as presenter
    [viewController presentViewController:loginViewController animated:NO completion:nil];

}

显然,我假设处理登录的UIViewController被称为LoginViewController。如果情况并非如此,请继续并在代码中调整其名称:)

无论如何,对于这种情况,我宁愿建议您不要以模态方式显示登录信息。更好的方法是实际更改应用程序主rootViewController的{​​{1}}属性。

在你的情况下看起来像这样:

UIWindow