问题描述
我想在弹出视图控制器时将数据从 childVC 传递到 parentVC。
ChildViewController { /处理数据/ //获取数据值
value = 123 self.navigationController?.popViewController(动画:
真) }
ParentViewController { //使用子 vc(value 123) 的值 }
如何将数据传回以在 ParentViewController 中使用它?
解决方法
您可以使用转场,并在弹出到新的视图控制器之前准备转场。
在 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?
,
最简单的方法是在孩子上使用回调闭包属性。设置子视图控制器时从父级设置它。当孩子完成后,检查回调是否为 != nil(如果可选),如果是,则在弹出之前调用它。
,您还可以创建自定义处理程序以在弹出后完成。下面是一个例子:
extension UINavigationController {
func popViewControllerWithHandler(animated:Bool = true,completion: @escaping ()->()) {
CATransaction.begin()
CATransaction.setCompletionBlock(completion)
self.popViewController(animated: animated)
CATransaction.commit()
}
}