storyboard segue(セグエ)で画面遷移をつなぐ(macos)

storyboard を使用して画面遷移ができたので、引き続き以下の動画を参考に、遷移元画面から先画面へ値を受けわたす。

(135) AppleProgramming – YouTube

1.できあがり画面

テキストボックスに値を入れて、Popoverボタンを押すと、テキストボックスの内容が画面表示される

Storyboardy segue

2.ViewControllerの追加

上記はポップアップにメッセージを表示しているだけに見えるが、元の画面と別のViewControllerを用意し、Segue(セグエ)とやらを利用して画面遷移をおこなっている。

まず、File ~New-FileでCocoaクラスを追加

Storyboard segue00001

Storyboard segue00002

呼び出しもと画面用に、FirstViewController、ポップアップ画面用にSecondViewController クラスを追加する。

Storyboard segue00009

追加された。

Storyboard segue00010

呼び出し元画面上部の、青いアイコンを選択、Identity Inspector の Custom Class で、上記で作成した、FirstViewControllerを指定する。

Storyboard segue00011

呼び出しさき画面(ポップアップ)画面上部の青いアイコンを選択、こちらもIdentity Inspector のCustom Class で上記で追加したSecondViewControllerを指定。

Storyboard segue00005

3.コンポーネントの追加

呼び出し元画面にテキストフィールドをドロップ

Storyboard segue00006

呼び出し先画面に、ラベルをドロップ

Storyboard segue00007

ラベルの画面制約(Add New Constraints)を追加する。

Storyboard segue00008

4.Outletの追加

追加したテキストフィールドをControlボタンを押下しながら、FirstViewControllerのソースコードにドロップする、

Storyboard segue00013

コンテキストメニューが表示されるので、Outletに名前をつけ、Connect

Storyboard segue00014

同様に、ラベルをCntrolボタンを押下しながら、ソースコードにドロップ

Storyboard segue00015

コンテキストメニューで、Outletに名前をつける

Storyboard segue00016

5.Segue(セグエ)の追加

呼び出し元画面から呼び出し先画面に伸びる矢印、これがSegue(セグエ)?を選択して、Attributes Inspector の Identifier で名前をつける。

Storyboard segue00017

呼び出し元画面にて、prepare メソッドをオーバーライド

Storyboard segue00018

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
    }
}

これで、実行すると、本記事の先頭の画面が表示された!めでたし。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です