XcodeのStoryboard上で、画面遷移が必要な時のセグエのやり方です。(iOSでもmacOSでも考え方は同じです。)
ボタンを押した時に画面遷移する時は、Ctrlキーを押しながらそのボタンからドラッグすると、線が伸びて、遷移したい画面まで引っ張るとセグエができます。
この場合は、ボタンを押すと無条件で画面遷移が起こります。
では、TableViewの行をクリックした時に、クリックした行の情報を次の画面に渡して遷移したい場合はどうするのか。
この場合のセグエの設定の仕方は、遷移元の画面の上にある一番左のアイコンから、Ctrlキーを押しながらドラッグして、線を遷移先の画面まで伸ばします。(図1参照)
図1
//TableViewをクリックした時に呼ばれる @IBAction func click(_ sender: NSTableView) { //行番号を取得 let iRow = sender.clickedRow if iRow < 0 { return } //対応する行の値をフィールドに保存 self.prefName = self.prefectureList[sender.clickedRow] //呼び出したいセグエの識別名を使ってセグエを呼び出す self.performSegue(withIdentifier: "showTwitterList", sender: nil) } override func prepare(for segue: NSStoryboardSegue, sender: Any?) { //セグエの識別名が目的のものか確認 if segue.identifier == "showTwitterList" { //遷移先のViewControllerを取得 let vc = segue.destinationController as! TwitterListViewController //遷移先のViewControllerのフィールドに値を渡している vc.prefName = self.prefName } }
図2で、右の方の赤枠の中を見てもらうと、TableView型のtvのactionにclickメソッドを設定しています。
これは、tvをクリックすると呼ばれます。
上記のコードを見てもらうと、clickメソッドの中でperformSegue(withIdentifier:sender:)メソッドを呼び出して、"showTwitterList"というセグエを実行させています。
すると、コードの下側のメソッドprepare(for:sender:)が呼び出され、その中でセグエの名前を確認して、その中で遷移先のViewControllerであるTwitterListViewControllerクラスを取得して、
TwitterListViewControllerのprefNameフィールドに渡したいデータを保存しています。
つまり、遷移先の画面に何かしらのデータを渡したい時は、コントローラから直接セグエを引っ張るのではなく、ViewControllerの上の一番左側のアイコンからセグエを伸ばし、遷移させたいタイミングの
メソッドでperformSegue(withIndetifier:sender:)メソッドで目的のセグエを指定して、prepare(for:sender:)メソッドで、各セグエで渡したいデータを渡します。
図2