UIStoryboardSegue
概要
2 つの ViewController 間の視覚的な遷移の実行とその準備のためのオブジェクト
UIKit で利用可能な 標準の遷移 はサポートしている
サブクラスを作成し、カスタムの遷移を作成することもできる
遷移内の ViewController に関する情報を保持している
直接は作成しない。Storyboard のランタイムに作成させる
UIViewController の performSegue(withIdentifier:sender:) メソッドを利用することで、segue を programmatically に開始することができる
https://developer.apple.com/documentation/uikit/uistoryboardsegue
サブクラス化について
ViewController 間の遷移を自作したいときにサブクラス化できる
Interface Builder 上で ViewController 同士を segue で接続し、その segue のタイプを inspector 上でカスタムに作成したものに設定すれば良い。このとき、カスタムな segue にはクラス名がないといけない
Storyboard のランタイムは、カスタムな segue を発見すると、クラスのインスタンスを新しく作成し、ViewController オブジェクトと一緒に設定する。
https://developer.apple.com/documentation/uikit/uistoryboardsegue
prepare(for:sender:)
描画前に、遷移先の ViewController の設定をする のために利用する。デフォルト実装は持たない
segue がトリガーされた後、画面上の遷移が発生する前に、Storyboard のランタイムによって呼び出される
UIStoryboardSegue オブジェクトは、遷移に関する情報 を保持している
遷移に含まれる ViewController 群への参照
例) UITableView から発生した場合、sender はユーザがタップしたセルを識別できる。これを利用して、target となる ViewController に値を設定できる
https://developer.apple.com/documentation/uikit/uiviewcontroller/1621490-prepare
prepareForSegue で一玄関rにができるが、fat になりがち
モーダルが閉じるタイミングで viewDidAppear が呼ばれないパターンがあるが、
遷移に必ずフックさせたい処理を書いておくとフックできる
viewcontroller を生成する必要がないので、prepareSegue を使うタイミングはほとんどないはず
performSegue(withIdentifier:sender:)
segue を programmatically に開始する
programmatically に追加され、Interface Builder から利用できないものをソースに segue を開始したい場合に利用する
---
Kind
Presentation
ViewController がモーダル表示される際の方法を設定する
UIViewController の modalPresentationStyle プロパティに、UIModalPresentationStyle の値を設定する
Transition
ViewController が present(_:animated:completion:) メソッドを利用されたときにどのようなアニメーションで描画されるか、を設定する
UIViewController の modalTransitionStyle プロパティに、UIModalTransitionStyle の値を設定する
デフォルト値は UIModalTransitionStyle.coverVertical