QA@IT

Iosプログラミングで複数回の画面遷移した後に、元のViewに戻るには?

8797 PV

現在、Deployment Targetを5.1、Main InterfaceをStoryBoardでやっているのですが、複数回画面遷移をした場合、一番最初のViewにどのようにすればもどれるのか分からず、質問させていただきました。

具体的に現在の状況を例を使って説明させていただきます。

まず、UIViewControllerがA,B,Cと3つあるとします。

  • アプリが起動時には、最初Aが読み込まれます。
  • そしてこのAからBへと画面遷移します。
  • さらにBからCへと画面遷移します。
  • 最後に、CからAに戻りたいのですが、戻る方法がわからないという感じです。

次に、コードで説明せさていただきます。

  • AからBへ遷移するコード

    B *b_view = [self.storyboard instantiateViewControllerWithIdentifier:@"B"];
    [self presentViewController:b_view animated:NO completion:nil];
    
  • BからCに遷移するコード

    C *c_view = [self.storyboard instantiateViewControllerWithIdentifier:@“C];
    [self presentViewController:c_view animated:NO completion:nil];
    
  • CからAに戻るコード

    [self dismissModalViewControllerAnimated:YES];//これだとBにしか戻れない
    

次に試してみたが駄目だった方法を書きます。

  • Cでdismissを呼んで、デリゲートでさらにBでdismissを呼んでみる。しかし、dismissは一回しか発生しませんでした。
  • CにAのインスタンスを引っ張ってきて、そのインスタンスを元にpresentViewControllerを呼んでみる。これはアプリが固まってしまいました。

おとなしく、Cで新しくAのインスタンスを作って、presentViewControllerを呼ぶのも有りなのですが、ややナンセンスなのと、元のAのインスタンスのインスタンス変数を消したくないためやっていません。

このように、どのようにすればCからAに戻れるのか分かりません。
ご回答いただけると幸いです。

  • presentViewController:animated:completion:メソッドは、いわゆるモーダル・ダイアログを開くAPIです。いったい、どんなユーザーインターフェース設計になっているんですか?モーダル・ダイアログなのですから、GUI的に画面Cから画面Aに戻るのが不自然なはずなのですが。 -
  • お返事ありがとうございます。自分はモーダル・ダイアログというのをよくわかっていないのですが、アラートボックスのような物でしょうか?

    私としてはそういう意図は無く、googleで「StoryBoard 画面遷移」で検索した一番上のページで、このメソッドを使っていたため、ただの画面遷移の目的で使っておりました。

    普通は画面遷移を行う際には、どのようなメソッドを使うべきなのですか?
    -
  • ユーザインターフェスとしては、Aからショップである(B)に、アイテムを押すとさらにアイテムの詳細画面の(C)に。詳細画面で買うと、Aに戻るという感じです。 -

回答

storyboardを使っていて、UINavigationControllerも使わず、UIStoryboardSegueも使わずにやるなら、思いつく方法は以下の2つです。

  1. View階層を直接操作して手動で画面遷移を行う。
  2. 3つのViewControllerの親ViewControllerを作り、transitionFromViewController:toViewController:duration:options:animations:completion:メソッドを使う。

これらの方法を使えば、何の制限も受けずに自由に画面遷移できます。

編集 履歴 (0)
  • お返事ありがとうございます。

    回答を元に、「Custom Container View Controller」を使って解決できました。いろいろと勉強になりました、ありがとうございました。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。