これは私がこれを行うために働くObjectiveCコードです。ストーリーボードでは、タブバーコントローラーがルートビューコントローラーとして設定されていることに注意してください(つまり、[初期ビューコントローラー]の横にチェックマークが付いています)。コードはこの設定をオーバーライドして、代わりにスタンドアロンのログインビューコントローラーをポップアップさせます。
//Note that my storyboard file's name is "Main.storyboard"--here you put the name of the storyboard file WITHOUT The extension, which is why I just say "Main" here.
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
//On the storyboard, you must set the Storyboard ID of the Login View Controller to the name "LoginForm" that is used below, so the code can find the View Controller referred to
UIViewController *loginController = [storyboard instantiateViewControllerWithIdentifier:@"LoginForm"];
self.window.rootViewController = loginController;
Login View Controllerで、ログインが正しいことが確認されたために自分自身を閉じる準備ができたら、次のようにAppDelegateのメソッドを呼び出します。
//Be sure to import the App Delegate at the top with #import "AppDelegate.h"
AppDelegate *myAppDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[myAppDelegate showMainScreen];
App Delegateで、これが「showMainScreen」メソッドです。ルートビューコントローラーとして一時的に設定されていたログインビューコントローラーを閉じ、メイン画面をルートビューコントローラーとして戻していることに注意してください。
- (void)showMainScreen {
[self.window.rootViewController dismissViewControllerAnimated:YES completion:nil];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UITabBarController *main = [storyboard instantiateViewControllerWithIdentifier:@"tabBarForm"];
self.window.rootViewController = main;
}
もう1つのヒント:セキュリティ対策として、アプリが最小化されるたびにログイン画面をポップアップするのが好きなのでapplicationWillEnterForeground
、ログインコントローラーが起動するたびにスワップする方法として、アプリデリゲートのメソッドを呼び出します。
- (void)applicationWillEnterForeground:(UIApplication *)application {
[self showLoginScreenIfNecessary];
}