Передача переменных между контроллерами View с использованием segue

Я использую Swift и Xcode 6 и хотел бы передать переменную от одного контроллера View к другому с помощью Segue.

Я создал segue под названием "MainToTimer", который запускается после нажатия кнопки. Я хотел бы иметь возможность использовать переменную под названием "Длительность" на втором контроллере просмотра.

Можно ли передавать несколько переменных и констант?

Какой код мне нужен для каждого контроллера просмотра?

Спасибо заранее.

Ответы

Ответ 1

Сначала настройте свойство/свойства для хранения ваших переменных во втором контроллере представления (назначение).

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
    }
}

Да, также можно передавать несколько переменных и констант, снова используя параметр 'sender' prepareForSegue. Если у вас есть несколько данных, которые вы хотите передать, поместите их в массив и сделайте этот массив отправителем.

SWIFT 3 С Swift 3 метод prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) был изменен на prepare(for segue: UIStoryboardSegue, sender: Any?)

Ответ 2

В первом ViewController поместите это (для модального сегмента):

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let theDestination = (segue.destinationViewController as ViewController2)
    theDestination.Duration2 = Duration
}

Измените ViewController2 на имя второго ViewController. В ViewController2 создайте переменную класса:

var Duration2 = (whatever the type - UInt8 I guess for time)

Что это. У вас будет значение Duration2 значение Duration от первого ViewController.