NavigationControllerのファイルを作らずにViewControllerに値を直接渡す方法
みなさん、モーダルとナビゲーションを使う時の値渡しってめんどくさくないですか?
それのためだけにいちいちNavigationControllerのファイルを作ってそれからprepareで渡すのはいらないファイルが増えるし、その上めんどくさかったので、今回はそんないらないファイルを作らなくても簡単に値渡す方法をご紹介していきたいと思います。
今の私の構成はStoryboard → Navigation → Storyboard となっています。
それぞれ矢印はsegueを意味しています。
以下のコードは値を渡したいと思っているViewControllerで書かれています。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "recruit" {
let navi = segue.destination as! UINavigationController
let controller = navi.viewControllers[0] as! ViewController
controller.coordinate = self.myCoordinate
}
}
コードの補足説明
上記のコードの簡単にコード説明をしていきます。
まずif文はいつもの感じですね!ここで、identifierを調べています。一番重要なのは次の行から、
let navi = segue.destination as! UINavigationController
このコードは、セグエに接続先がUINavigationControllrになりますので、そいつをまずは取得をしています。そして次の行では、取得してきたnavigationは配列で、viewcontrollerを持っていますので、「0」つまりrootViewcontrollerを取得してasによって型を変換しています。
let controller = navi.viewControllers[0] as! ViewController
あとは簡単でいつも通り、渡したい値を書いてあげればいいです。
これで無駄なファイルを作らなくてすみましたー( ^ω^ )