在我的AppDelegate.m
中,我有以下代码在启动时为用户设置初始视图控制器,具体取决于是否存在密钥链中的凭据。
如果用户确实存储了凭据,则应用程序将使用故事板ID balancescreen
实例化主用户界面。这适用于下面的代码。
如果用户没有存储凭据,我想在{{1}的顶部显示带有故事板ID,loginscreen
,模态的登录视图控制器输入正确的凭据后,视图控制器将被解除(我已经处理过了),用户显示了主界面。 这是我需要帮助的,找到一个解决方案来做到这一点,而不会使应用程序出现故障。
这是我目前的代码:
balancescreen
编辑:这是我的故事板设置:
答案 0 :(得分:1)
请勿更改应用程序中的rootViewController。使rootViewController接收导航到登录或应用程序的请求。
更改窗口的rootViewController是不好的做法,因为您需要手动执行动画。故事板流程如下所示:
答案 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