SwiftとXcode 6を使用し、セグエを使用して1つのView Controllerから別のView Controllerに変数を渡したいです。
ボタンを押すとトリガーになる「MainToTimer」というセグエを作成しました。 2番目のView Controllerで「Duration」という変数を使用できるようにしたいと思います。
複数の変数と定数を渡すことは可能ですか?
各View Controllerにどのコードを関連付ける必要がありますか?
前もって感謝します。
最初に、2番目のView Controller(宛先)で変数を保持するためのプロパティを設定します。
_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'パラメーターを使用して、複数の変数と定数を渡すこともできます。渡すデータが複数ある場合は、それらを配列に入れて、その配列を送信者にします。
Swift From Swift 3、メソッドprepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!)
がprepare(for segue: UIStoryboardSegue, sender: Any?)
に変更されました
最初のViewController
にこれを配置します(モーダルセグエの場合):
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let theDestination = (segue.destinationViewController as ViewController2)
theDestination.Duration2 = Duration
}
ViewController2
を2番目のViewController
の名前に変更します。 ViewController2
でクラス変数を作成します。
var Duration2 = (whatever the type - UInt8 I guess for time)
それでおしまい。 Duration2
の値には、最初のDuration
からのViewController
の値が含まれます。