LoginSignup
64
60

More than 5 years have passed since last update.

iOS8からUIViewControllerに追加されたshowViewController()とshowDetailViewController()について

Posted at

親ViewControllre(UISplitViewControllerやUINavigationController)が持つ
子ViewControllerにて画面遷移、または画面表示を実行する場合、
わざわざ親ViewControllreを呼び出して、実行させていたが、
showViewController、showDetailViewControllerを使えば、
親ViewControllreを呼び出すことなく実行できる

showViewController:sender:

  • UISplitViewControllerの子ViewControllerの場合

    引数で渡すViewControllerがprimary側のViewControllerに置き換わる

  • UINavigationControllerの子ViewControllerの場合

    引数で渡すViewControllerがPushで画面遷移する

  • 親ViewControllerを持たないただのViewControllerの場合

    引数で渡すViewControllerがモーダルで表示される

showDetailViewController:sender:

  • UISplitViewControllerの子ViewControllerの場合

    • horizotal size classがregularの場合(分割表示)

      引数で渡すViewControllerがsecondary側のViewControllerに置き換わる

    • horizotal size classがcompactの場合(1画面表示)

      引数で渡すViewControllerがモーダルで表示される
      ただし、primary側がNavigationControllerの場合、pushで画面遷移する

  • UINavigationControllerの子ViewControllerの場合

    メソッドなし。

  • 親ViewControllerを持たないただのViewControllerの場合

    引数で渡すViewControllerがモーダルで表示される

targetViewControllerForAction:sender:

親ViewController(UISplitViewControllerやUINavigationControllerなど)が指定したメソッドを実装しているか取得する。
ない場合、見つけるまで親をたどっていく。

showViewControllerやshowDetailViewControllerでは、
内部で、このメソッドが呼び出している。
```

UISplitViewController

UINavigationController

UIHogeViewController

上記のようなツリーのコンテナ構造の場合、
UIHogeViewControllerでshowViewControllerを実行すると、
一つ親のUINavigationControllerのshowViewControllerがあるか
targetViewControllerForActionでチェックする。
UINavigationControllerには実装されているので、
UINavigationControllerのshowViewControllerが実行される。

しかし、showDetailViewControllerの場合、
UINavigationControllerには実装されていないので、
さらにもうひとつ上のUISplitViewControllerをチェックする。
UISplitViewControllerは実装されているので、そのshowDetailViewControllerが実行される。

64
60
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
64
60