【问题标题】:Swift: How to pass data when popping view controllerSwift:弹出视图控制器时如何传递数据
【发布时间】:2021-06-25 02:23:33
【问题描述】:
我想在弹出视图控制器时将数据从 childVC 传递到 parentVC。
ChildViewController { /处理数据/ //获取数据值
值 = 123 self.navigationController?.popViewController(动画:
真的)}
ParentViewController { //使用来自子 vc(value 123) 的值 }
如何将数据传回以在 ParentViewController 中使用?
【问题讨论】:
标签:
ios
swift
navigationcontroller
popviewcontroller
【解决方案1】:
您可以使用转场,并在弹出新视图控制器之前为转场做好准备。
在 VC1 中
performSegue(withIdentifier: "toVC2", sender: self)
let dataInVC1 = "wow"
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "toVC2" {
let vc = segue.destination as SecondViewController
vc?.someData = dataInVC1
}
在 VC2 中
var someData: String?
【解决方案2】:
最简单的方法是在子节点上使用回调闭包属性。设置子视图控制器时从父级设置它。当孩子完成后,检查回调是否为 != nil(如果是可选的),如果是,则在弹出之前调用它。
【解决方案3】:
您还可以创建自定义处理程序以在弹出后完成。这是一个例子:
extension UINavigationController {
func popViewControllerWithHandler(animated:Bool = true, completion: @escaping ()->()) {
CATransaction.begin()
CATransaction.setCompletionBlock(completion)
self.popViewController(animated: animated)
CATransaction.commit()
}
}