storyboard segue(セグエ)で画面遷移をつなぐ(macos)
storyboard を使用して画面遷移ができたので、引き続き以下の動画を参考に、遷移元画面から先画面へ値を受けわたす。
(135) AppleProgramming – YouTube
1.できあがり画面
テキストボックスに値を入れて、Popoverボタンを押すと、テキストボックスの内容が画面表示される
2.ViewControllerの追加
上記はポップアップにメッセージを表示しているだけに見えるが、元の画面と別のViewControllerを用意し、Segue(セグエ)とやらを利用して画面遷移をおこなっている。
まず、File ~New-FileでCocoaクラスを追加
呼び出しもと画面用に、FirstViewController、ポップアップ画面用にSecondViewController クラスを追加する。
追加された。
呼び出し元画面上部の、青いアイコンを選択、Identity Inspector の Custom Class で、上記で作成した、FirstViewControllerを指定する。
呼び出しさき画面(ポップアップ)画面上部の青いアイコンを選択、こちらもIdentity Inspector のCustom Class で上記で追加したSecondViewControllerを指定。
3.コンポーネントの追加
呼び出し元画面にテキストフィールドをドロップ
呼び出し先画面に、ラベルをドロップ
ラベルの画面制約(Add New Constraints)を追加する。
4.Outletの追加
追加したテキストフィールドをControlボタンを押下しながら、FirstViewControllerのソースコードにドロップする、
コンテキストメニューが表示されるので、Outletに名前をつけ、Connect
同様に、ラベルをCntrolボタンを押下しながら、ソースコードにドロップ
コンテキストメニューで、Outletに名前をつける
5.Segue(セグエ)の追加
呼び出し元画面から呼び出し先画面に伸びる矢印、これがSegue(セグエ)?を選択して、Attributes Inspector の Identifier で名前をつける。
呼び出し元画面にて、prepare メソッドをオーバーライド
6.コーディング
ようやく、コーディングが出てきた。
prepare メソッドにて、テキストフィールドの値をセグエのデスティネーションの値に設定
import Cocoa class FirstViewController: NSViewController { @IBOutlet weak var nameFiled: NSTextField! override func viewDidLoad() { super.viewDidLoad() // Do view setup here. } override func prepare(for segue: NSStoryboardSegue, sender: Any?) { if segue.identifier == "DetailSegue" { (segue.destinationController as! NSViewController).representedObject = nameFiled.stringValue } } }
}
呼び出し先のViewロードで、呼び出し元画面で設定された値を取り出し、ラベルに設定
import Cocoa class SecondViewController: NSViewController { @IBOutlet weak var nameLabel: NSTextField! override func viewDidLoad() { super.viewDidLoad() // Do view setup here. nameLabel.stringValue = representedObject as! String } }
これで、実行すると、本記事の先頭の画面が表示された!めでたし。