はじめに
テキストや画像の配置といったデザインは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」を選択します。
Segueに名前をつける
Segueを選択した状態で下の図のように Storyboard Segue の Identifier として適当な名前をつけます。今回は PushShopDetail としました。
Stroyboardでする操作は以上となります。
コードからSegueを参照する
先ほどSegueに名前をつけたので、今度はそのSegueをコードから参照します。こうすることにより、遷移先のViewControllerインスタンスを参照できたりします。仮に今回は、UIButtonをタップして画面遷移するとします。
performSegueWithIdentifier を呼ぶ
まずは普通にボタンをタップした時に呼ばれる関数を定義します。この中でperformSegueWithIdentifier関数をびます。1番目の引数は先ほどつけたSegueのIdentifierです。2つ目は画面遷移のsenderです。これについては後に説明します。
func buttonTapped(sender: UIButton){
performSegueWithIdentifier("PushShopDetail", sender: button)
}
prepareForSegueを定義する
続いて、prepareForSegueという関数を定義します。この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が設定されている場合には注意してください。
おわりに
かなり雑な解説で申し訳ありません。ここが違う、ここがうまく動かない、ここが分からないなどありましたらご指摘してくださるとありがたいです。