セグエを使用してビューコントローラ間で変数を渡す 質問する

セグエを使用してビューコントローラ間で変数を渡す 質問する

私は 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?)

おすすめ記事