StoryboardでChild View Controllerにデータを渡す方法(Xcode 8 & Swift 3)

公開日: : iOSアプリ開発

20160918-133158.jpg

Storyboardで、Child View Controllerにデータを渡す方法を紹介します!

なお、サンプルアプリはXcode 8とSwift 3を使って作っています。

    

通常のセグエと同じように、prepare(for:sender:)を使えばデータを渡すことができます。

例えば、以下のようなビューコントローラー構成があったとします。

20160918-134117.jpg

  • StoryboardのContainer Viewを使って、ビューコントローラーにビューコントローラーを埋め込む
  • ピンクのビューコントローラー(Parent View Controller)に、ViewController.swiftを割り当てる
  • 緑のビューコントローラー(Child View Controller)に、SecondViewController.swiftを割り当てる

    

まず、Embed Segueのidentifierに”EmbedSegue”と設定しておきます。

20160918-134737.jpg

    

SecondViewController(Child View Controller側)では、外部から受け取ったデータ(textForLabel)をviewDidLoadでラベルに表示するようにしておきます。

class SecondViewController: UIViewController {

    public var textForLabel: String = ""

    @IBOutlet weak var label: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        label.text = textForLabel
    }
}

    

この時、ViewController(Parent View Controller)側のprepare(for:sender:)に以下のようなコードを書けば、Child View Controller側にデータを渡すことができます。

class ViewController: UIViewController {
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        switch (segue.identifier, segue.destination) {
        case ("EmbedSegue"?, let destination as SecondViewController):
            destination.textForLabel = "Hello world."
        default:
            ()
        }
    }
}

    

@akio0911はこう思った。

通常のセグエと同じやり方でデータを渡せるのは楽でいいですね!

prepareForSegueメソッドの名前がSwift 3だとprepare(for:sender:)に変わっている点は注意が必要ですね!

    

この記事を書いた人
あきお(@akio0911
iOSエンジニア、ブロガー。「プログラミングで人々を幸せに」をテーマに活動中。著書に「iPhoneアプリ開発レシピ」「cocos2d for iPhoneレッスンノート」など。東京・大阪にてアプリ開発講座「アプリクリエイター道場」を主催。 MAMORIO株式会社 技術顧問(インタビュー記事)、VISITS Technologies株式会社 技術顧問(インタビュー記事)。ブログ「卵は世界である」を運営。

関連記事

この記事が気に入ったら「いいね!」しよう

follow us in feedly

Feedlyで最新記事を購読

Twitterで更新情報をゲット!

LINEでご感想・ご要望お送りください!
(スマホでLINEを起動 > 友だち追加 > QRコード)

プログラミング未経験者向けのプログラミング入門連載記事を始めます

こんにちは、@akio0911です。 これからプログラミング未経

【RxSwift】BehaviorRelayとPublishRelayについてまとめてみた

こんにちは、@akio0911です。今回はRxSwiftのBe

【RxSwift】materialize, dematealizeを使ってみた

@toshi0383さんに教えていただいた、RxSwiftのm

【RxSwift】ストリームのcompletedをつぶす(消し去る)方法

RxSwiftで元々のストリームからcompletedをつぶす

【RxSwift】completedかerrorが流れてきたらsubscribeはdisposeされる

RxSwiftにおいて、completedかerrorが流れて

→もっと見る

PAGE TOP ↑