web-dev-qa-db-ja.com

iOS 5ストーリーボード、プログラムでパスを決定

ストーリーボードを使用して次のことを達成するのに問題があります。

セットアップが完了していない場合:アプリを実行->設定ビューコントローラーを表示->メインナビゲーションコントローラーを表示セットアップが完了した場合:アプリを実行->メインナビゲーションコントローラーを表示

したがって、基本的には、アプリをプログラムで設定ビューから開始する場合もあれば、メインナビゲーションコントローラーにスキップする場合もあります。

メインナビゲーションコントローラーからモーダルスタイルのセグエで設定ビューを表示することができましたが、表示方法がわかりませんメインナビゲーションコントローラーが表示されます。何か案は?

18
René

私はそれを少し違う方法で行うことができました:

  1. 初期ビューコントローラとしてUINavigationControllerを使用します。
  2. ロードするものの決定を管理するルートビューコントローラーを作成します。
  3. ルートビューコントローラーからメインビューおよび設定ビューにストーリーボードセグエを作成し、セグエに適切な識別子を付けます。
  4. ルートビューコントローラから適切な識別子を使用してperformSegueWithIdentifierを呼び出します。

ちょうど別の解決策、これが役立つことを願っています。

20
amoshaviv

デフォルトでは、メインストーリーボードの最初のView Controllerがインスタンス化され、アプリの起動時に自動的に表示されます。これを防ぐには、info.plistファイルからUIMainStoryboardFile設定を削除する必要があります。

デフォルトのViewControllerがないため、アプリの起動時にプログラムで自由に作成できます。 IStoryboardのドキュメント を参照してください。 +storyboardWithName:bundle:を使用してストーリーボードをロードしてから、–instantiateViewControllerWithIdentifier:を使用して正しいViewControllerを作成します。また、.nibベースのUIで行っていたのと同じように、メインUIWindowを作成し、それにViewControllerのビューを追加する必要があります。 UIMainStoryboardFileを設定しないと、メインウィンドウが作成されないことに注意してください 説明 を読んでください。

29

私はamoshavivに似た何かをしました、彼のアドバイスは健全です。私はそれを少し変えました、そして私はもう少し情報を与えるでしょう。 UIViewControllerから派生したカスタムMyInitialViewControllerクラスを作成し、これを初期ビューコントローラーにしました。ストーリーボードファイルで、すべての(私の場合は3つ)可能な「実際の」最初のビューコントローラーに適切な名前でモーダルセグエを作成しました。 MyInitialViewControllerクラスで、

- (void)viewDidAppear:(BOOL)animated;

メソッド、最初にどのビューに切り替えるかを確認してから、正しい方法を実行します

[self performSegueWithIdentifier:@"NameOfSegue" sender:self];

事実上、これにより、MyInitialViewControllerは、表示されたときに実行される切り替えにすぎません。このビューを実際に表示する必要がないため、ロード時に最初にこれを実行しようとしましたが、viewDidAppearは機能しますが、機能しませんでした。

これを視覚的にスムーズにするために、私は次のことを試みました。セグエのプロパティで、アニメーションを無効にしました。空のままにして、起動画像の背景色に合わせた背景色を付けました。

3
ecotax