swift - 通过后退按钮将变量传递给其他视图控制器
问题描述
我有两个视图控制器。一个是通过“显示”转场导航到的。UINavigationBar 中有一个后退按钮,我没有更改。后退按钮返回到初始视图控制器。在带有后退按钮的视图控制器中,我将数据存储在一个变量中。
如何将此数据传递给我的初始视图控制器?
我试过了:
viewWillDisappear(_ animated: Bool) {
let vc = ViewController()
vc.data = items
}
但打印时初始视图控制器中的数据为空。
我尝试使用:
prepare(for segue: ...)
但我不确定后退按钮使用什么segue。
我似乎也无法将后退按钮的操作添加到我的视图控制器。
解决方案
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)
}
推荐阅读
- javascript - 如何根据值在javascript中对Hashmap进行排序
- flutter - 在 null 上调用了 setter 'setValue='
- node.js - 自适应卡在特定时间后过期
- jenkins - 无法以 Jenkins 管理员身份登录,也无法查看选项和构建作业
- java - java REST API 中的多部分表单请求给出 FileNotFound 异常
- mysql - 无法运行此 MySQL 查询
- ios - How to disable hint of correct text in UITextView?
- angular - 为什么我的网络应用程序对每个服务器请求使用越来越多的内存?
- python - PyInstaller - 隐藏的导入列表
- java - 没有特定方法的Java二分查找