首页 > 解决方案 > 通过后退按钮将变量传递给其他视图控制器

问题描述

我有两个视图控制器。一个是通过“显示”转场导航到的。UINavigationBar 中有一个后退按钮,我没有更改。后退按钮返回到初始视图控制器。在带有后退按钮的视图控制器中,我将数据存储在一个变量中。

如何将此数据传递给我的初始视图控制器?

我试过了:

viewWillDisappear(_ animated: Bool) {
    let vc = ViewController()
    vc.data = items
}

但打印时初始视图控制器中的数据为空。

我尝试使用:

prepare(for segue: ...)

但我不确定后退按钮使用什么segue。

我似乎也无法将后退按钮的操作添加到我的视图控制器。

标签: swiftvariablessegueviewcontroller

解决方案


vc与您要返回的控制器不同。


在第二个控制器中创建闭包变量,并将模型数组作为参数

class SecondViewController: UIViewController {
    var callback: (([Item]) -> Void)?
}

然后在第一个控制器的prepare(for:sender:)分配目标中callback并声明您要更改第一个控制器的data何时callback被调用

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "yourSegueIdentifier" {
        let destinationVC = segue.destination as! SecondViewController
        destinationVC.callback = { items in
            self.data = items
        }
    }
}

然后,当您需要(在第二个控制器中viewWillDisappear)调用callback给定项目时

override func viewWillDisappear(_ animated: Bool) {
    callback?(items)
}

推荐阅读