SWIFT Storyboardのsegueで遷移先に値を渡す(テーブルで選択した値)

segueで値を引きわたす。モデルで。 まずテーブルのセルが選択されたときの処理は、このメソッドデリゲートメソッドが呼ばれます。

送付元のクラスのテーブルで表示されている、DBの値をモデルごと渡す

送付先のクラスで、表示します。

送付元のクラスでの実装

まず送付元のクラス
  // メンバ変数 送付するモデル
    var send_person:Person?  //PersonはCoreDataのテーブル テーブルも型になる。

   func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        //選択行のpersonsを取得して詰め込み
        send_person = persons[indexPath.row]
        performSegue(withIdentifier: "detailSegue", sender: send_person)
    }

セル選択行をsend_personに詰め込みます。 それをperformSegue実行時に、senderで渡します。 ちなみにpersons[indexPath.row]で選択セルのデータが取得できますね。 配列に詰め込まれているのが、ループ処理みたいにされて、テーブルに表示されているわけですから、、、

    //モデルまるごと送っています。
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "detailSegue"{
            let subView = segue.destination as! detailViewController
            subView.person = send_person!
        }
    }

"detailSegue"はStoryBoadで画面を結んでいる線のプロパティに値を設定しておく必要があります。 f:id:happy_teeth_ago:20180623022939p:plain

送付先のクラスの実装

subView.personは当然、送付先クラスで宣言しておかないといけませんね。 ここでは、var person = Person()になります モデルごと送ると、遷移先でデータ表示するときが楽ですね。

   //受け取り用のインスタンス
    var person = Person()

   override func viewDidLoad() {
        super.viewDidLoad()
        
        person_name.text = person.name
        person_reading.text = person.reading
        person_birthday.text = person.birthday
        person_dead_day.text = person.deadday
  }

モデルでpersonごと渡しているのでモデルのプロパティにアクセスして、詰め込むだけです。 ここではpersonというモデルを渡しているということです。 わかりにくい点や間違いがありましたら教えてください。