概要
画面遷移はアプリとして基本的な動作なのに、頭の中でちょっと整理できていないので覚え書き。
ファイル構成
まずは、ファイル構成。UIViewController
を継承した FirstViewController
SecondViewController
を作成する。
Storyboardで、2つのViewController
を配置し、ラベルとテキストボックスを適当に配置する。
そして、それぞれのカスタムクラスを割り当てる。
セグエの作成
FirstViewController
に配置したGoボタンからsegue
を伸ばして、SecondViewController
へセグエ(custome)を作成する。
画面遷移(FirstView → SecondView)
作成したセグエにidentifier
名を設定する。ここでは、goSecondViewSegue
とする。
ここまでで、実行してGoボタンを押してみるとFirstView
からSecondView
へ画面遷移するはずである。とても簡単。
画面遷移(SecondView → FirstView)
しかし、このままだと戻れないので、Backボタンを押すとFirstView
へ戻るように設定してやる。
その為に、FirstViewController
内に、戻ってきた時にコールされるメソッドを定義してやる。
そうすると、Backボタンを右クリックにてSecondView
にあるExit
ボタンへ伸ばすと、FirstViewController
に定義したメソッドが表示されるので設定する。ここでは、backFromSecoundView
というメソッドにした。
/*
* SecondViewから戻ってきた時の処理
*/
@IBAction func backFromSecondView(segue:UIStoryboardSegue){
NSLog("FirstViewController#backFromSecondView")
}
FirstViewController
に定義するのがミソである。結構この方法がややこしく忘れやすい。
そこで実行するとBackボタンから戻ることができるはずである。
ソースコード
ここまでのソースコードは下記。
import UIKit
class FirstViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
/*
* SecondViewから戻ってきた時の処理
*/
@IBAction func backFromSecondView(segue:UIStoryboardSegue){
NSLog("FirstViewController#backFromSecondView")
}
}
import UIKit
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
パラメータの受け渡し
たいていのアプリでは画面遷移の時には、必ずパラメータの受け渡しが必要となってくる。
そこで今回はFirstView
のテキストボックスに入力した値(String)をSecondView
で表示してみる。
まずはSecondViewController
に、パラメータ受取用のプロパティ変数を宣言しておく。初期化処理の時にデータが表示ラベルとバインドするように代入する。
import UIKit
class SecondViewController: UIViewController {
@IBOutlet weak var paramLabel: UILabel!
//パラメータ受取用プロパティ
var param:String = "init param"
override func viewDidLoad() {
super.viewDidLoad()
//パラメータのバインド
self.paramLabel.text = self.param
}
}
パラメータを送信するFirstViewController
側では、セグエで画面遷移する前に呼ばれるprepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
メソッドをoverride
してパラメータを設定する。
遷移先であるSecondViewController
をインスタンス化して画面で入力したテキストボックスの値を設定する。
/*
* 画面遷移
*/
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
var secondViewController:SecondViewController = segue.destinationViewController as SecondViewController
secondViewController.param = self.paramText.text
}
これを実行すると、テキストボックスで入力したデータが、遷移先の画面のラベルに表示される。
ちなみに、入力された値の検証には、shouldPerformSegueWithIdentifier(identifier: String?, sender: AnyObject?)
メソッドををoverride
して、問題あればfalse
を返すようにするようだ。
/*
* 画面遷移の前に実行する検証メソッド
*/
override func shouldPerformSegueWithIdentifier(identifier: String?, sender: AnyObject?) -> Bool {
return true
}
今回はここまで。
Lovely Swift!!!