17379


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くらいにしか使ったことがないのですが、その理解であっているのでしょうか？


CC BY-SA 3.0
2015-10-05T14:42:12.517
17290
2015-10-07T14:20:45.967
8593
question
swift
swift Segueの種類について


以下、ざっくりとした説明で、抜けや間違いがあるかもしれません。

Storyboardはアプリを「Scene」と「Segue」によって抽象化しています。

「Scene」は大体画面と考えておけば問題ないです。ひとつの「Scene」は複数の「Scene」から構成されていることもあります。「Scene」同士の関係を表現するのが「Segue」です。

### Adaptive Action Segue

Action Segueは画面遷移を表現するSegueです。これらのSegueは現在のデバイスのSize
Classや、コンテナビューコントローラの種類に応じて、異なる挙動をします。

  * **show**  
コンテナとなるビューコントローラがなければ単に上に積み重ねる形で表示を行います。`UINavigationController`がコンテナの場合は`pushViewController()`の遷移を行います。画面の間に繋がりがあり、「次」の画面を表示する場合に使う基本的なセグエです。

  * **show detail**  
`UISplitViewController`がコンテナの場合に、詳細ペインのビューコントローラを置き換える動きをします。画面のサイズによって２ペイン表示でなかった場合は、現在の画面を置き換える挙動をします。呼び出し元・先の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の組み合わせで表示されている」という意味合いを持ちます。


CC BY-SA 3.0
2015-10-07T14:20:45.967
17379
2015-10-07T14:20:45.967
5337
17290
answer