私は Swift と Xcode 6 を使用しており、Segue を使用して 1 つの View Controller から別の View Controller に変数を渡したいと考えています。
ボタンが押されるとトリガーされる「MainToTimer」というセグエを作成しました。2 番目の View Controller で「Duration」という変数を使用できるようにしたいと思います。
複数の変数と定数を渡すことは可能ですか?
各 View Controller に関連付ける必要があるコードは何ですか?
よろしくお願いします。
ベストアンサー1
まず、2 番目のビュー コントローラー (宛先) で変数を保持するためのプロパティを設定します。
class YourSecondViewController: UIViewController {
var duration:Double?
}
次に、ボタンでカスタム シーグエをトリガーします。変数 ('duration') を送信者の引数として使用します。
class YourFirstViewController: UIViewController {
@IBAction func buttonTapped(sender: AnyObject) {
self.performSegueWithIdentifier("MainToTimer", sender: duration)
}
}
最後に、prepareForSegue メソッドをオーバーライドして、この送信者データを渡します。
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if (segue.identifier == "MainToTimer") {
let secondViewController = segue.destinationViewController as YourSecondViewController
let duration = sender as Double
secondViewController.duration = duration
}
}
はい、prepareForSegue の 'sender' パラメータを使用して、複数の変数と定数を渡すこともできます。渡したいデータが複数ある場合は、それらを配列に入れて、その配列を送信元にします。
スイフト3Swift 3からは、メソッドがprepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!)
次のように変更されました。prepare(for segue: UIStoryboardSegue, sender: Any?)