Перенос данных в другой ViewController без перемещения ViewControllers - PullRequest
0 голосов
/ 21 декабря 2018

Я относительно новичок в кодировании в Swift.Я пытаюсь передать данные обратно на другой контроллер представления, не переходя к этому контроллеру, чтобы пользователь мог оставаться на том же экране.Я смотрю на использование делегата и задаюсь вопросом, будет ли это лучший способ получить доступ к переменной на нескольких контроллерах представления.Спасибо

Просмотр контроллера 1:

func passVariables() {


    let passSleepValue = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "sbHome") as! sbHomeController
    passSleepValue.getSleepValue = sleepValue




    //navigationController?.pushViewController(passSleepValue, animated: true)


}

Просмотр контроллера 2:

    func updateDay() {






    let dayScoreAvg = getSleepValue

    dayScore.text = String(format: "%.1f", dayScoreAvg)

    print("Get sleep Value is \(getSleepValue)")

}

1 Ответ

0 голосов
/ 21 декабря 2018

Похоже, вы уже можете передавать данные во второй ViewController, но не можете передать некоторые данные обратно.

Таким образом, один из способов - использовать шаблон делегата .

Начните с объявления протокола делегата с методом передачи данных (в вашем случае это может быть просто передача String)

protocol SecondVCDelegate: class {
    func passText(_ text: String)
}

, затем создайте переменную delegate во втором ViewController

class SecondViewController: UIViewController {
    weak var delegate: SecondVCDelegate?
    ...
}

Теперь вы можете реализовать этот протокол для первого ViewController

extension ViewController: SecondVCDelegate {
    func passText(_text: String) {
        // do something with text passed from second VC
    }
}

, теперь установите delegate Второго VC как self, прежде чем нажать его

func passVariables() {

    let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "sbHome") as! sbHomeController
    viewController.getSleepValue = sleepValue
    viewController.delegate = self
    navigationController?.pushViewController(viewController, animated: true)

}

, затем во втором VC вы можете простовызовите метод на вашем delegate и в первом VC этот метод будет вызван

delegate?.passText("Hello First!")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...