#はじめに
Navigationbarの戻るボタンを押した時に、特定の動きをつけたい場合にどうすればよいかの説明を記録しておきたいと思います。
#開発環境
macOS 11.0.1
Xcode version 12.2
Swift version 5.3.1
#実装したいこと
今回はNavigationbarの戻るボタン押した時に、子の画面のTextFiledに入力した値を親に渡すことを実装したいと思います。
戻るボタンを押して子から親画面に移動するということは、言い換えると戻るボタンを押すと親画面が現れると言い換えることができます。この、親画面が現れるという時にはUINavigationControllerDelegateのWillShowが呼ばれます。これを利用して、戻るボタンを押した時の挙動を操りたいと思います。
ChildViewController
import UIKit
//UINavigationControllerDelegateを追加
class ChildViewController: UIViewController,UINavigationControllerDelegate{
@IBOutlet weak var b: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
//NavigationControllerのdelegateはChildViewControllerが委任していることを書く
navigationController?.delegate = self
}
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
//下記を書くことで親画面であるParentViewControllerの変数にアクセスできる
if let controller = viewController as? ParentViewController{
//処理したい内容を書く
//今回は実装したい、aは親画面の変数にTextFiledであるbに入力されたtextを渡してあげる
controller.a = b.text!
}
}
}
重要なことは
・class宣言時にUINavigationControllerDelegate
・navigationController?.delegate = selfと委任してやる
・willShow内に実行したいことを書く
です!
#参考にしたサイト
参考:navigationbarのバックボタンを押した時に-値を渡したい