Передача данных в предыдущий ViewController


#1

Доброго времени суток
Подскажите, как правильно передать данные в предыдущий ViewController?
К примеру я просто хочу переходить во второй контроллер, вводить число и при возвращении назад, выводить это число уже в первом контроллере. Как это правильно сделать, инфы об этом найти не могу адекватной


#2

Вот Урок , это ты имел виду http://www.codingexplorer.com/segue-swift-view-controllers/ ?


#3

Нет, это как раз передача данных из контроллера A в контроллер B, а мне нужно наоборот, что бы данные отправлялись из контроллера B в контроллер A


#4

Здесь доступно описано. Смотрите “Create an Unwind Segue”


#5

Это можно сделать с помощью делегата.

Предположим, мы имеем такой второй вьюконтроллер:

class SecondVC: UIViewController {
    weak var delegate: SecondVCDelegate?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor.red
    }
    
    override func viewDidDisappear(_ animated : Bool) {
        super.viewDidDisappear(animated)
        if self.isMovingFromParentViewController {
            self.delegate?.secondVC_BackClicked(data: "hello")
        }
    }
}

protocol SecondVCDelegate: class {
    func secondVC_BackClicked(data: String)
}

И первый:

class FirstVC: UIViewController, SecondVCDelegate {
    private var secondVC: SecondVC!
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let tap = UITapGestureRecognizer.init(target: self, action: #selector(view_Tapped(sender:)))
        self.view.addGestureRecognizer(tap)
        
    }
    
    @objc private func view_Tapped(sender: UITapGestureRecognizer) {
        if secondVC == nil {
            secondVC = SecondVC()
            secondVC.delegate = self
        }
        self.navigationController?.pushViewController(secondVC, animated: true)
    }
    
    func secondVC_BackClicked(data: String) {
        print (data)
    }
}