单击图像时,我正在对我的父VC进行搜索。我想将数据从子VC传递回父VC。我一直在探索各种选择来将数据传递回父VC,但无法弄清楚。
由于子级VC是Navigation的一部分,并且通过segue展示(显示),因此应该有一种简单的方法将数据传回父级。
如何做到?
我已经尝试过viewWillDisappear
方法,但是以下代码中的parentVC无效。
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if self.isMovingFromParent {
if let navVC = self.presentingViewController as? UINavigationController {
if let parentVC = navVC.viewControllers.first as? ParentViewController {
print("viewWillDisappear() moving to parent") // Not executed
parentVC.data = self.data
}
}
}
}
答案 0 :(得分:1)
一种策略是将父级设置为子级的代理。您可以在prepare(for:sender:)
函数中创建此关系。
如果您不熟悉授权,则本文是不错的指南:https://medium.com/@jamesrochabrun/implementing-delegates-in-swift-step-by-step-d3211cbac3ef
答案 1 :(得分:1)
使用委托将数据发送回父级。
答案 2 :(得分:1)
您可以使用3种方式将数据从子级ViewView关联回父级ViewController,如previos回答中所述,您可以使用委托或clousures,但是由于您不想处理
if segue.identifier ==“ segueIdentifier”
然后,您可以使用通知,在父级中创建观察者,然后在子级视图控制器中发布。 在父级
中override func viewDidLoad(){
NotificationCenter.default.addObserver(self, selector: #selector("yourSelectorName"), name: "NotificationName", object: nil)
以及与此相关的子帖子中。
NotificationCenter.default.post(name: "notificationName", object: nil, userInfo: ["your data array "])
如果通知名称不是字符串,则必须为其创建一个名称,并且可以在userInfo中传递或不传递数据。
答案 3 :(得分:0)
Swift 5,Xcode 10.3
使用以下任意一种方法
1。通过self.navigationController.viewControllers访问parentVC的引用,然后使用该引用来访问变量和设置数据
2。您可以使用展开搜索
3。使用委托协议
如果您需要更多详细信息,请参阅 https://stackoverflow.com/a/9736559/10579134