2

次の効果を実現するために、xcodeストーリーボードでビューコントローラーをチェーンしたいと思います。

A-> B-> C-> D-> E-> B-> C-> D-> E->B->..。

ここで、上記の文字は個別のビューコントローラ(フルサイズのシーン)を表しています。ビュー間を移動するときに、右から左に水平方向のスライドセグエを作成したいのですが、前のビューの状態を保持したくない、または保持したくない(つまり、プッシュまたはモーダルセグエを使用しない)。ただし、ビュー間でいくつかの状態を転送する必要があります。

ストーリーボードエディタ、コード、またはその2つの組み合わせを使用して、これを最適に実現する方法についての提案はありますか?

4

1 に答える 1

5

いくつかのオプションが私に飛び出します:

  1. 古いバージョンのiOSとの下位互換性が最も高い最も簡単なソリューションは、ナビゲーションコントローラーを使用し、ビューコントローラーへの参照をBどこかに保持することです。そうすれば、でE、次のような機能を実行できますIBAction

    [self.navigationController popToViewController:B animated:YES];
    

    このモデルでは、からまでのセグエを除いて、すべてのセグエがストーリーボードに表示されます。このE場合B、上記のコードをIBAction(またはその他の)で使用します。

  2. iOS 5の互換性を放棄できる場合は、unwindセグエを使用することもできます。このシナリオでは、すべてのセグエがストーリーボードに表示されます。しかし、私たちの多くはまだiOS 5の互換性をあきらめたくないので、このソリューションを考えたくないかもしれません。ただし、アンワインドセグエを使用したい場合は、次のようにアンワインドアクションを定義するだけですB

    - (IBAction)backToB:(UIStoryboardSegue *)segue
    {
        // if you need to do any UI update because we got an unwind segue
        // back to this controller, do that here
    }
    

    でこのアンワインドアクションを実行するとB、突然、IBで表示される新しいセグエタイプbackToB(ただし、それよりも適切な名前を付けることをお勧めします)が表示され、これを使用してからに移動できEますB。明らかに、他のすべてのプッシュセグエは、通常どおりストーリーボードに表示されます。

  3. ナビゲーションコントローラーを本当に使用したくないが、iOS 4との互換性は必要ない場合は、ビューコントローラーの包含を使用してこれを実現することもできます。この場合、親のカスタムコンテナーコントローラーがParentVCあり、AスルーEは子コントローラーになります。次に、カスタムセグエを使用して、子コントローラーのシーケンスを移行できます。

  4. 最終的なバリエーションの1つは、次のとおりです。

    BABCDE

    このシナリオでは、オプション1と同様に、ナビゲーションコントローラーを使用しているだけで、Bが最初に読み込まれると、プログラムですぐに次の操作を実行します。viewDidLoad

    [self presentViewController:A animated:NO];
    

    ルートビューコントローラですがB、そうであったようAに感じます。完了すると、にA戻りBます。その時点で、標準のプッシュセグエプログレッションを実行できますが、Bルートコントローラーを作成したため、に戻るだけで済み、維持することを心配する必要はありません。周りへのポインタ。このモデルは、ログインコントローラやスプラッシュ画面、または通常のフローから少し外れたものである場合に非常に意味があります。CDEBEpopToRootViewControllerAnimatedBBA

これらのうち、1はおそらく最も簡単で、2は最もエレガントと見なされる可能性があります(ただし、iOS 5以前のサポートは失われます)。3は、もう少し(複雑な)コードを記述してもかまわない場合のオプションであり、メモリの使用が重要です。 、および4は、1と同様に非常に簡単ですが、フローがアプリにとって意味があるかどうかの問題にすぎません。個人的には、View Controllerが何であったかに応じて、オプション1または4に傾倒しますA。また、iOS 4との互換性が必要な場合は、これら2つのオプションがNIBでも機能します。

于 2013-01-22T19:11:32.367 に答える