任意のタイミングでの画面遷移(基本設定)
Main.storyboardでの操作
- 遷移元のViewControllerを選択
- [control]+[ドラッグ&ドロップ]で遷移先のViewControllerに繋ぐ
- present modallyに設定する
- (presentationをFullScreenにする)※任意
- [segue](矢印)のIdentifierを設定する。
遷移元のコード
----Class内.任意のメソッド内に記述する----
performSegue(withIdentifier: <#String#>, sender: nil)//任意のタイミング
遷移したいところに記述しておく
<#String#>はMain.storybordで設定したsugueのIdentifierを書く
遷移先のコード
----Class内.任意のメソッド内に記述する----
dismiss(animated: true, completion: nil)//任意のタイミング
FullScreenの設定では画面をスワイプして遷移元の画面に戻ることができないので上記のコードを書いておく。
値を渡しながら画面遷移する
上記の設定、コードは必須
遷移元のコード
----Class内に記述する----
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.withIdentifier == <#String#>{
let <#name#> = segue.destination as! <#UIViewController#>
<#name#>.受け取る変数 = 渡す値
}
}
画面遷移時に自動で呼ばれる
1. <#String#>にはsegueのIdentifierを書く。
2. <#UIViewController#>には遷移先のClass名
3. <#name#>には任意の定数名。
例)NextViewControllerClassであればNextVC等
遷移先のコード
----Class内に記述する----
var 受け取る変数名 = 任意のデータ型()
受け取る変数を定義しておく
遷移先から画面を戻す時に処理を行う場合
[先述した基本設定]の設定、コードは必須
加え、下記のコードを書く
遷移元のコード
<#protocolName#>//後述のプロトコルをClassに適合する
------以下、変数名等に関しては先に説明したものと同じように書く------
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == <#String#>{
let <#name#> = segue.destination as! <#UIViewController#>
<#name#>.delegate = self
}
}
下記のコードを記載したあとProtocolでエラーが出る。
プロトコルメソッドが記載されていないためである。
エラーで補完されたプロトコルメソッドに行いたい処理を書く
遷移先のコード
----Class外に記述する----
protocol <#protocolName#>{
func <#functionName#>()
}
----Class内に記述する----
var delegate:<#protocolName#>?
----Class内.任意のメソッド内に記術する----
delegate?.<#functionName#>()
dismiss(animated: true, completion: nil)//任意のタイミング