【Swift】画面遷移時に次に画面へ値を引き渡す方法【Segue】

この記事では、Swiftの画面遷移時に、次の画面へ値を引き渡す方法を紹介します。

スマホ向けアプリでは、画面遷移は欠かせないですよね。

当然、「今の画面で入力された情報を、次の画面へ持っていきたい!」ということもあるかと思います。

この記事は、こちらの方法を、ソースコード付きで紹介しています。

なお、この記事では、画面遷移の方法として、Navigation Controllerを使用しています。Navigation Controllerを使用した画面遷移の方法は、こちらの記事で紹介していますので、興味のある方は是非こちらの記事もご覧ください。

この記事では、最終的に以下のようなツールを作れます。

目次

画面遷移時に次の画面へ値を引き渡す方法

次の画面へ値を引き渡す処理は、数行程度のプログラムで実装できてしまいます。

今回は、以下の流れで、値の引き渡し方を確認していきましょう。

先ほどご紹介したとおり、最初の画面で入力されたテキストを、次の画面に表示するツールを作っていきます。

  • 画面遷移をする2つのView Controllerを作る
  • テキストをラベルに表示するプログラムを実装する
  • 画面遷移時に値を引き渡すプログラムを実装する
  • プログラムの仕組みを考えてみる

画面遷移をする2つのView Controllerを作る

まずは、Navigation Controllerを使って、遷移をする2画面を作ってみましょう。

テキスト入力用の画面と、入力結果を表示する画面を用意します。

STEP
2つの画面を用意する

Storyboard上に、2つのViewControllerを配置しましょう。

また、最初に表示されるViewControllerへは、Navigation Controllerを適用しておきます。

STEP
各画面に要素を配置する

1つ目の画面には、テキスト入力ができるように、Text Fieldを配置しましょう。

また、入力完了後、画面遷移ができるように、Buttonも配置しましょう。

2つ目の画面には、テキスト入力結果を表示できるように、Labelを配置しましょう。

STEP
画面遷移を実装する

ボタンを押したら、次の画面へ遷移するようにさせましょう。

Storyboard上で、controlキーを押しながら、ボタンを選択し、そのまま次の画面へ引っ張り、離します。プルダウンからShowを選択し、ボタンタップ時に、次の画面へ遷移するようにしましょう。

また、設置されたSegueに名前をつけましょう。この名前は、後ほど、プログラムの中の処理で使用します。

Segueを選択し、Attribute Inspectorを表示します。Identifierへnextと入力しておきましょう。

テキストをラベルに表示するプログラムを実装する

続いて、2つ目の画面用に、ラベルにテキストを表示するプログラムを実装しましょう。

STEP
新しいプログラムファイルを作成する

Project Navigator上で、右クリックをし、New File… を選択します。

Cocoa Touch Classを選択し、SecondViewControllerという名前で、新しいファイルを作成しましょう。

STEP
Labelにテキストを表示するプログラムを実装する

作成したプログラムに、以下のコードを追加しましょう。

ハイライトがかかっている箇所が、追加したコードです。

import UIKit

class SecondViewController: UIViewController {
    
    // Storyboard上のラベル
    @IBOutlet var label: UILabel!
    
    // 表示するテキスト
    var text: String!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        label.text = text
    }

}
STEP
View Controllerと紐づける

作成したソースコードと、Storyboard上のViewControllerを紐づけましょう。

2つめのView Controllerを選択し、Identity Inspectorを開きます。

Classに、今作成した SecondViewController を設定しましょう。

Connections Inspectorを開きます。

labelを引っ張り、Storyboard上のLabelと紐づけましょう。

これで、テキストをLabelへ表示するプログラムができました!

画面遷移時に値を引き渡すプログラムを実装する

いよいよ、画面遷移時に、値を引き渡すプログラムを実装していきましょう。

1つ目の画面のテキストフィールドに入力されたテキストを、2つ目の画面へ引き渡します。

STEP
画面遷移時に値を引き渡すプログラムを実装する

1つ目の画面用のプログラムViewController.swiftへ、以下の通りコードを追加しましょう。

ハイライトされている箇所が、追加したコードです。

import UIKit

class ViewController: UIViewController {
    
    @IBOutlet var textField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "next" {
            let secondViewController = segue.destination as! SecondViewController
            secondViewController.text = textField.text!
        }
    }

}
STEP
View Controllerと紐づける

実装したプログラムと、TextFieldを紐づけます。

Storyboardを開き、1つ目のView Controllerを選択します。

Connection Inspectorを開き、textFieldを引っ張り、View Controller上のTextFieldと紐づけましょう。

これでプログラムは完成です。

早速シミュレータを起動して、実行してみましょう。

TextFiledに適当なテキストを入力し、Buttonをタップすると、入力したテキストが、次の画面に表示されていますね。

Backをタップし戻り、何度か入力を表示を繰り返してみましょう。

プログラムの仕組みを考えてみる

改めて、今回作成したプログラムが、何をしているのか考えてみましょう。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "next" {
        let secondViewController = segue.destination as! SecondViewController
        secondViewController.text = textField.text!
    }
}

1行ずつ、順に確認しましょう。

行目
prepare について

公式マニュアルを見てみましょう。以下の通り書いてあります。

Notifies the view controller that a segue is about to be performed.

Segueが実行される、ということを、View Controllerへ通知してくれるメソッドのようです。

つまり、prepareは、Segueが実行される直前に、実施されるメソッドのようですね。ですので、この中で、次の画面へ変数を渡せば、変数の受け渡しができそうです。

行目
変数 segue について

プログラムの中に、UIStoryboardSegue型の変数segueが2箇所登場していますね。

こちらも、公式マニュアルを見てみましょう。UIStoryboardSegueは、以下のプロパティを持つようです。

プロパティ名用途
sourceSegueでの遷移時、遷移元のViewController情報
destinationSegueでの遷移時、遷移先のViewController情報
identifierSegueのID

上記を踏まえると、プログラムの処理は以下のようです。

  • 遷移前に、segue.identifierでSegueのIDを取得し、設定しているIDと一致しているかチェック
  • segue.destinationで遷移先のViewControllerクラス名を取得し、遷移先へ変数を渡す

これで、プログラムの処理が分かりましたね。最後に変数の受け渡し方法をまとめましょう。

【まとめ】変数の受け渡し方法

改めて、次の画面への変数の渡し方をまとめましょう。

  • 変数の引き渡しは、画面遷移の直前に呼び出されるprepareメソッドに実装
  • UIStoryboardSegueからSegueのIDを取得し、遷移先が想定通りがチェック
  • UIStoryboardSegueから遷移先のViewControllerクラスを取得し、変数を代入

遷移先が複数ある場合も、SegueのIDごとに処理を分けることで、これまでと同じように変数を受け渡すことができますね。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次