スクリーンショット_2018-08-27_22

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

あとは簡単でいつも通り、渡したい値を書いてあげればいいです。

これで無駄なファイルを作らなくてすみましたー( ^ω^ )

この記事が気に入ったらサポートをしてみませんか?