質問: swiftプログラムを行っていてSegueの違いがいまいち理解できません。 1. show ... 現在表示されている View Controller の一階層奥に押し出す形で画面遷移 2. show detail ... 現在表示されている View Controller を新しい View Controller に置き換える形で画面遷移 3. present modally ... 現在表示されている View Controller の上に積み重なる形で画面遷移 4. popover presentation ... 現在表示されている View Controller を表示しつつ、新しい View Controller をポップオーバー 5. custom ... ?? 6. Relationship Segue view controller ... Navigation barで使用 というくらいの理解しかしていません。 結論として1-5についてはSegueの見え方の違いだけなのでしょうか? また6に関してはNavigation barくらいにしか使ったことがないのですが、その理解であっているのでしょうか?
回答: 以下、ざっくりとした説明で、抜けや間違いがあるかもしれません。 Storyboardはアプリを「Scene」と「Segue」によって抽象化しています。 「Scene」は大体画面と考えておけば問題ないです。ひとつの「Scene」は複数の「Scene」から構成されていることもあります。「Scene」同士の関係を表現するのが「Segue」です。 ### Adaptive Action Segue Action Segueは画面遷移を表現するSegueです。これらのSegueは現在のデバイスのSize Classや、コンテナビューコントローラの種類に応じて、異なる挙動をします。 * **show** コンテナとなるビューコントローラがなければ単に上に積み重ねる形で表示を行います。`UINavigationController`がコンテナの場合は`pushViewController()`の遷移を行います。画面の間に繋がりがあり、「次」の画面を表示する場合に使う基本的なセグエです。 * **show detail** `UISplitViewController`がコンテナの場合に、詳細ペインのビューコントローラを置き換える動きをします。画面のサイズによって2ペイン表示でなかった場合は、現在の画面を置き換える挙動をします。呼び出し元・先のSceneが一覧と詳細の関係の意味合いを持つことを示します。 * **present modally** 現在のコンテナの種類に関係なく、覆いかぶさるように新しいSceneを表示します。このケースでは、呼び出した元のSceneに対して何らかの応答を返すために用いられます。 * **popover presentation** Sceneをポップオーバーとして表示するものです。ポップオーバーとは、もともとiPadの広い画面ではモーダルウインドウの表示に全画面を使うよりも、画面の一部しか占有しないポップオーバーの方が求められたため登場しましたが、iPhoneの大画面化に伴いiPhoneでも使えるようになりました。 ### Non-Adaptive Action Segue Size Classの概念がなかったiOS8以前に存在したSegueです。状況に関わらず、`push`や`modal`の遷移を行います。(適切な状況で使わなかった場合、クラッシュします) これらについては、もう推奨されない機能ですので、説明を割愛します。 ### Others * **custom** 画面遷移の見栄えを自作したい場合に使うSegueです。 * **unwind** 元のSceneに戻る場合に利用されるSegueです。 Non-Action Segue * **relationship** 複数のSceneに関連があることを示すSegueです。`UINavigationBar`や`UITabBarController`で用いられます。そのSceneがどういったコンテキスト(ナビゲーションなのか、タブなのか)で画面に表示されるのかを示す意味を持ちます。 * **embed** あるビューコントローラに別なビューコントローラが埋め込まれている、つまり「ひとつの画面が異なるSceneの組み合わせで表示されている」という意味合いを持ちます。