Swift でナビゲーションコントローラーを使った画面遷移で前の画面に戻る方法
ここでは Swift で、ナビゲーションコントローラーを使った画面遷移で前の画面に戻る方法をご説明します。
ナビゲーションコントローラーを使って、NEXT ボタンをタップした時に以下のような画面遷移をするとします。
ここで、DONE ボタンをタップした時に No. 2 の画面から No. 1 の画面に戻ったり、No. 3 の画面から No. 1 の画面に戻る方法をご紹介します。
アプリは Navigation Controller を使っていて、ボタンからの Show segue でつないでいるだけです。
Swift でひとつ前の画面に戻る方法
Swift で、ナビゲーションコントローラーを使った画面遷移でひとつ前の画面に戻るには、ナビゲーションコントローラの popViewControllerメソッドが使えます。
例えば、二つ目の画面の DONE ボタンをタップした時にひとつ前の画面に戻りたい時には次のようにできます。
import UIKit
class ViewController2: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func doneButtonTapped(_ sender: Any) {
self.navigationController?.popViewController(animated: true)
}
}
self.navigationController?.popViewController(animated: true) で一番上に表示されている現在の View Controller がナビゲーションスタックからポップされて、ひとつ前の画面に戻ります。
Swift で複数前の画面に戻る方法
Swift で、ナビゲーションコントローラーを使った画面遷移で複数前の画面に戻るには、ナビゲーションコントローラの popToViewControllerメソッドが使えます。
popToViewController メソッドの第一引数にはポップした後に表示させたい viewController を指定します。
例えば、三つ目の画面の DONE ボタンをタップした時に、二つ前の画面に戻りたい時には次のようにできます。
import UIKit
class ViewController3: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func doneButtonTapped(_ sender: Any) {
if let viewControllers = self.navigationController?.viewControllers {
self.navigationController?.popToViewController(viewControllers[viewControllers.count - 3], animated: true)
}
}
}
まず、10 行目で、ナビゲーションコントローラのスタックにある View Controller の配列を取得しています。
一番最後に現在の画面が入っているので、二つ前の画面に戻りたい時は viewControllers[viewControllers.count - 3] で二つ前の View Controller が取得できます。
viewControllers[viewControllers.count - 1]: 現在の View Controller
viewControllers[viewControllers.count - 2]: ひとつ前の View Controller
viewControllers[viewControllers.count - 3]: 二つ前の View Controller
viewControllers[viewControllers.count - 4]: 三つ前の View Controller
...
存在しないインデックスを指定してしまうとエラーになりますのでご注意ください。
これで、ナビゲーションスタックから View Controller ポップされて、二つ前の No. 1 の画面に戻ります。
Swift でルート View Controller に戻る方法
Swift で、ナビゲーションコントローラーを使った画面遷移で最初の画面に戻るには、ナビゲーションコントローラの popToRootViewControllerメソッドが使えます。
例えば、三つ目の画面の DONE ボタンをタップした時に、二つ前の画面に戻りたい時、戻り先は最初の画面なので、次のようにしても同じ動きになります。
import UIKit
class ViewController3: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func doneButtonTapped(_ sender: Any) {
self.navigationController?.popToRootViewController(animated: true)
}
}
self.navigationController?.popToRootViewController(animated: true) でナビゲーションスタックから Root View Controller 以外の View Controller を全てポップして、最初の画面に戻ります。
以上、Swift で、ナビゲーションコントローラーを使った画面遷移で前の画面に戻る方法をご説明しました。