ストーリーボードに、有効なログインとメインビューコントローラーを設定しました。後者は、ログインが成功したときにユーザーが移動するビューコントローラーです。私の目的は、認証(キーチェーンに格納されている)が成功した場合はメインビューコントローラをすぐに表示し、認証が失敗した場合はログインビューコントローラを表示することです。基本的に、私はこれをAppDelegateで実行したいと思います。
// url request & response work fine, assume success is a BOOL here
// that indicates whether login was successful or not
if (success) {
// 'push' main view controller
} else {
// 'push' login view controller
}
私はメソッドperformSegueWithIdentifierについて知っています。ただし、このメソッドはUIViewControllerのインスタンスメソッドであるため、AppDelegate内から呼び出すことはできません。既存のストーリーボードを使用してこれを行うにはどうすればよいですか?
編集:
Storyboardの最初のビューコントローラは、何にも接続されていないナビゲーションコントローラになりました。MainIdentifierはUITabBarControllerであるため、setRootViewController:の区別を使用しました。それからこれは私の線がどのように見えるかです:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
BOOL isLoggedIn = ...; // got from server response
NSString *segueId = isLoggedIn ? @"MainIdentifier" : @"LoginIdentifier";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
UIViewController *initViewController = [storyboard instantiateViewControllerWithIdentifier:segueId];
if (isLoggedIn) {
[self.window setRootViewController:initViewController];
} else {
[(UINavigationController *)self.window.rootViewController pushViewController:initViewController animated:NO];
}
return YES;
}
提案/改善は大歓迎です!