使用默认后退按钮时,展开方法不起作用

时间:2017-07-17 06:00:13

标签: ios swift segue unwind-segue

我有三个视图控制器,如下面

enter image description here

我在viewcontroller1中编写了unwind方法,并在它们展开到viewcontroller1时尝试从viewcontroller2和viewcontroller3接收一些数据。

@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设置退出展开segue。 enter image description here

但为什么unwindToViewController方法永远不会被正确调用?我认为当我点击系统自动创建的按钮时,应该调用它们。

button

1 个答案:

答案 0 :(得分:1)

我通过使用委托而不是解开来解决这个问题。委托pattenr是解决此问题的更明确的方法。 通过创建一个名为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)
}