今日からでもすぐに取り入れられて、
- コードをよりクリーンにできる、とか
- 工数を削減できる、とか
そんなTipsの紹介記事です。
「知らなかった」「気づかなかった」「忘れていた」そんな誰かの役に立てば幸いです。
前提環境
- Xcode 11.3.1
- Swift 5.1.3
Unwind segue
概要・使い所
- 2つ以上前の画面に一気に戻りたい時。
- 特に、戻り先の画面にて、画面更新などの処理を行いたい時に便利。
手順
- FirstViewController > SecondViewController はpush遷移です。
- SecondViewController > ThirdViewController はmodal遷移です。
やりたいことは**「ThirdViewControllerからFirstViewControllerに一気に戻りたい」**です。
手順1.戻り先に関数を定義する
戻り先であるFirstViewControllerに以下のようなコードを書きます。
関数名はなんでも良いです。
@IBAction func backToFirst(_ segue: UIStoryboardSegue) {
print("\(segue.identifier!)")
}
手順2.遷移元にUnwind Segueを定義する
Storyboardの遷移元のViewControllerの"Exit"に対して、Ctrlを押しながらオブジェクトをドラッグするとUnwind Segueを定義できます。
例えば、UIButtonから"Exit"にCtrl+ドラッグするとこんなふうに上で定義したbackToFirst
が表示されますので、それを選択するとUnwind Segueを追加できます。
Unwind Segueを追加したら任意のSegue Identifierを付けます。
実行結果
ThirdViewControllerのUIButtonをtapすると、
(1) ThirdViewControllerが閉じられ、
(2) SecondViewControllerからFirstViewControllerにpopされる、
という動きになります。
すなわち、「ThirdViewControllerからFirstViewControllerに一気に戻りたい」を簡単に実現できます。
また、FirstViewControllerのbackToFirst(:_)
が実行され、segue.identifier
に上で付けたfromThirdToFirst
が渡ってきます。
すなわち、backToFirst(:_)
に、画面更新など、戻り先で行うべきコードを記述することができます。
蛇足
私はコードでこれらを(Unwind Segueと同程度に簡単に)実現できる方法を知りません。
もしご存知の方がいたらコメントで教えていただきたいです。