【Swift】Segueの使い方。遷移先のビューコントローラーにデータを渡す。(Swift 2.1、XCode 7.2)

2020年6月16日

遷移先の画面にデータを渡す

前回の記事で、セグエを使って画面を遷移させる方法について説明した。

画面と画面をセグエで接続する

 

画面遷移をするときに、テキストフィールドなどの遷移元のデータを遷移先の画面に渡したいと思うときがある。そこで、本記事では遷移先のビューコントローラー用のクラスを作り、データの受け渡しや動きを制御する方法を説明する

以降の手順は前回記事の続きから行うので、実装を試す人は先に読んでおくことをお勧めする。⇒「記事

メニューから「File」⇒「New」⇒「File…」を選択する。
新規ファイルを作成する。

 

テンプレートを選択する画面が表示されるので、「iOSのSource」⇒「Cocoa Touch Class」を選択する。
Cocoa Touch Classを選択する

 

クラス名を入力する画面が表示されるので、Classに「TestViewController」、Subclass ofに「UIViewController」を入力し、Nextボタンを押す。
クラス名を入力する

 

保存先を指定する画面が表示されるので、プロジェクトと同じ場所であることを確認し、Createボタンを押す。
保存場所を指定する

 

下図赤枠ビューコントローラーを選択し、紫枠のアイデンティティインスペクタボタンを押して設定画面を表示する。設定項目のIdentifierに「TestViewController」を入力する。

続いて、下図黄緑枠のビューコントローラーを選択し、設定項目のIdentifierに「TestViewController」を入力する。これで、緑画面と黄色画面のビューコントローラーにTestViewControllerが使われるようになった。

セグエの識別子を入力する

 

下図紫枠のアシスタントエディタボタンを押してTestViewController.swiftを開く。Ctrlキーを押しながら緑画面のボタンをドラッグ&ドロップでソースコードまで運んで吹き出しの設定画面を表示する。

Connectionに「Outlet」、Nameに「testButton」を入力し、Connectボタンを押す。これでソースコードから緑画面のボタンを操作できるようになった。

ボタンとソースコードのコネクションを確立

 

黄色画面のボタンも同じ変数名でコネクションを確立したいので、ソースコードの変数「testButton」の左側にある黒丸(下図赤枠)をドラッグ&ドロップで黄枠のボタンまで運ぶ。これでソースコードから黄色画面のボタンも操作できるようになった。

黄色画面のボタンとソースコドのコネクションを確立する。

 

TestViewController.swiftを開き以下のコードに変更する。

viewDidLoadメソッドが呼び出されたときにmessageの値をボタンのタイトルに設定している。

 

ViewController.swiftを開き以下のコードに変更する。

「画面遷移実行前の呼び出しメソッド」が呼び出されたら、セグエから遷移先のビューコントローラーを取得して受け渡すデータを設定している。

 

以下は実際のプレイ動画。遷移先画面のボタンのタイトルが遷移元から渡した値になった。

前画面に戻る処理をソースコードで制御する

ボタンを押すと前画面に戻るのでは無く、遷移先のビューコントローラーのソースコードの中で戻るタイミングを制御したいときがある。実装してみよう。

下図紫枠の「Unwind segue to “Exit"」を1つずつ選択しながらDeleteキーで削除する。水色枠のアシスタントエディタボタンを押してTestViewController.swiftを開く。Ctrlキーを押しながら緑画面のボタンをドラッグ&ドロップでソースコードまで運んで吹き出しの設定画面を表示する。

Connectionに「Action」、Nameに「dropExit」、Typeに「Touch Drag Exit」を設定しConnectボタンを押す。これで、緑画面のボタンをドラッグしたときのイベントをソースコードで受けれるようになった。

ボタンとソースコードのコネクションを確立する

 

黄色画面のボタンを選択し、下図赤枠のコネクションズインスペクタボタンを押して設定画面を表示する。黄緑枠のTouch Drag Exitの右にある丸をドラッグ&ドロップでソースコードのdropExitメソッドまで運ぶ。これで黄色画面のボタンをドラッグしたイベントをソースコードで受けれるようになった。

黄色画面のボタンをソースコードのコネクションを確立する

 

TestViewController.swiftと以下のコードに変更する。「ドラッグ時の呼び出しメソッド」でモーダル表示されているビューコントローラーを解放して前画面に戻している。

 

以下は実際のプレイ動画。遷移先画面のボタンをドラッグすると前画面に戻るようになった。