[解決済み] AppDelegateからストーリーボード上の異なる場所で条件付きで開始する。
質問
私は、ログインとメインビューコントローラが動作するストーリーボードを設定し、後者はログインが成功したときにユーザがナビゲートされるビューコントローラになります。 私の目的は、認証(キーチェーンに保存)が成功した場合、すぐにメインビューコントローラを表示し、認証が失敗した場合はログインビューコントローラを表示することです。 基本的に、私はこれを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内から呼び出すことができません。 既存のストーリーボードを使用してこれを行うにはどうすればよいですか?
EDITです。
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;
}
提案/改善を歓迎します。
どのように解決するのですか?
ストーリーボードは、メインストーリーボードとして設定されていると思います。
UIMainStoryboardFile
として設定されていると仮定します。) この場合、UIKitはストーリーボードを読み込み、その初期ビューコントローラをウィンドウのルートビューコントローラとして設定した後、次のように送信します。
application:didFinishLaunchingWithOptions:
をAppDelegateに送信します。
また、ストーリーボードにある最初のビューコントローラはナビゲーションコントローラであり、その上にメインビューコントローラまたはログインビューコントローラをプッシュするものとします。
ウィンドウにルートビューコントローラを求め、その上に
performSegueWithIdentifier:sender:
メッセージを送ることができます。
NSString *segueId = success ? @"pushMain" : @"pushLogin";
[self.window.rootViewController performSegueWithIdentifier:segueId sender:self];
関連
-
[解決済み] 角括弧 < > と引用符 " " を使って #import する。
-
[解決済み] なぜObjective-Cはプライベートメソッドをサポートしないのですか?
-
[解決済み] Objective-C の boolean の書式設定文字列?
-
[解決済み] 2つの日付の差を計算するにはどうすればよいですか?
-
[解決済み] IOSのUIViewからアプリケーションのドキュメントフォルダに画像を保存する
-
[解決済み] ベストプラクティス - 自分のプロジェクト/アプリのためのNSErrorドメインとコード
-
[解決済み] 別のUIViewの下にあるUIViewとのインタラクションを許可する
-
[解決済み] NSDictionaryにboolean値を追加するにはどうすればよいですか?
-
[解決済み] 警告 "format が文字列リテラルでなく、format の引数がない場合"
-
[解決済み] idの意味は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 現在の日付から7日分を差し引いた日数
-
[解決済み] 角括弧 < > と引用符 " " を使って #import する。
-
[解決済み] Objective-CのクラスでSwiftのプロトコルをインポートする
-
[解決済み] Objective-Cです。カテゴリ内のプロパティ/インスタンス変数
-
[解決済み] ARCを使用する場合、deallocでプロパティをnilに設定するのですか?
-
[解決済み] Objective-C の boolean の書式設定文字列?
-
[解決済み] NSURLをローカルファイルのパスに変換する
-
[解決済み] retainCountはいつ使うのか?
-
[解決済み] Objective-Cのプロテクトメソッド
-
[解決済み] Objective-Cで`oneway void`の使用例?