【Swift】Storyboardの画面遷移(push)をコードから呼ぶ

  • 82
    Like
  • 1
    Comment
More than 1 year has passed since last update.

はじめに

テキストや画像の配置といったデザインはStoryboardで実装したいけど、そのテキストなど中身とかはコードの方で設定したい場合があります。この場合は、Storyboardのsegueに名前をつけて、ボタンタップなどのイベントを受けた時にこのsegueを呼ぶようにすることで、デザインはStoryboard、画面遷移はコードで実装することができます。

環境

  • MacOS 10.10.2
  • Xcode 6.3
  • iOS 8.3
  • Swift 1.2

Storyboard

今回はPushで実装するという前提で行きます。Modalだとまた多少変わってきますので注意してください。
まずはStoryboardの方の設定です。

画面遷移の作成

通常のように、ViewControllerからViewControllerに右クリックで矢印を伸ばして、Segueを引きます。種類は「show」を選択します。

スクリーンショット 2015-05-11 16.16.03.png

Segueに名前をつける

Segueを選択した状態で下の図のように Storyboard Segue の Identifier として適当な名前をつけます。今回は PushShopDetail としました。

スクリーンショット 2015-05-11 16.17.55.png

Stroyboardでする操作は以上となります。

コードからSegueを参照する

先ほどSegueに名前をつけたので、今度はそのSegueをコードから参照します。こうすることにより、遷移先のViewControllerインスタンスを参照できたりします。仮に今回は、UIButtonをタップして画面遷移するとします。

performSegueWithIdentifier を呼ぶ

まずは普通にボタンをタップした時に呼ばれる関数を定義します。この中でperformSegueWithIdentifier関数をびます。1番目の引数は先ほどつけたSegueのIdentifierです。2つ目は画面遷移のsenderです。これについては後に説明します。

func buttonTapped(sender: UIButton){
    performSegueWithIdentifier("PushShopDetail", sender: button)
}

perpareForSegueを定義する

続いて、perpareForSegueという関数を定義します。このsenderが先ほどperformSegueWithIdentifierで引数にしたsenderとなります。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if sender is UIButton {
            if let shop = sender as! UIButton {
                let viewController = segue.destinationViewController as! ViewController
                // ここでなんらかの処理を書く
            }
        }
    }

ここで sequeのdestinationViewControllerが遷移先の画面となります。
prepareForSegueは、performSegueWithIdentifierとか関係なく、Segueによる画面遷移の際には必ず呼ばれることになる(気がする)ので、複数のSegueが設定されている場合には注意してください。

おわりに

かなり雑な解説で申し訳ありません。ここが違う、ここがうまく動かない、ここが分からないなどありましたらご指摘してくださるとありがたいです。