Метод размотки не работает при использовании кнопки "Назад" по умолчанию

У меня есть три вида контроллеров, как показано ниже

Я написал метод unwind в viewcontroller1 и попытался получить некоторые данные от viewcontroller2 и viewcontroller3, когда они возвращаются к viewcontroller1.

@IBAction func unwindToViewController1(segue: UIStoryboardSegue) {
    print("1")
    main_content = (segue.source as! MainContentViewController).main_content
}

@IBAction func unwindToViewController2(segue: UIStoryboardSegue) {
    print("2")
    detailed_content = (segue.source as! SupplementContentViewController).supplement
}

И установите выход для размотки уже для контроллера 2 и 3.

Но почему методы unwindToViewController никогда не вызываются правильно? Я думаю, что они должны быть вызваны, когда я нажимаю кнопку, автоматически созданную системой.

кнопка

1 ответ

Решение

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

protocol myDelegate {
    func updateMaincontent(main_content : String)
    func updateSupplement(supplement: String)
}

И создать экземпляр делегата внутри второго контроллера представления

var delegate: myDelegate?

Затем в первом контроллере представления сделайте расширение класса myDelegate и установите этот делегат контроллера второго представления в self в func prepare(for segue: UIStoryboardSegue, sender: Any?) метод

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let destinationViewController = segue.destination as? MainContentViewController {
            destinationViewController.main_content = self.main_content
            destinationViewController.delegate = self
        }
        else if let destinationViewController = segue.destination as? SupplementContentViewController {
            destinationViewController.supplement = self.detailed_content
            destinationViewController.delegate = self
        }
    }

Наконец, вернитесь ко второму контроллеру представления и установите значение делегата на то, что вы хотите в методе viewWillDisappear.

func viewWillDisappear(_ animated: Bool) {
        self.main_content = contentTextView.text
        delegate?.updateMaincontent(main_content: contentTextView.text)
}
Другие вопросы по тегам