如何将数据传递给 parent 视图控制器

How to pass data to parent view controller

单击图像时,我正在 parent VC 上执行 segue。我想将数据从 child VC 传回 parent VC。我一直在探索将数据传回 parent VC 的各种选项,但无法弄清楚。

由于 child VC 是导航的一部分,并且它是通过 segue 呈现(显示)的,因此应该有一种简单的方法将数据传回 parent。

怎么做?

我尝试了 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
            }
        }
    }
}

一种策略是将父项设置为子项的委托。您将在 prepare(for:sender:) 函数中创建此关系。

如果您不熟悉委托,这篇文章是很好的指南:https://medium.com/@jamesrochabrun/implementing-delegates-in-swift-step-by-step-d3211cbac3ef

使用委托将数据发送回父级。

您可以使用 3 种方法将数据从 child 返回到 parent ViewController,如之前的回答中所述,您可以使用委托或闭包,但由于您不想处理

if segue.identifier == "segueIdentifier"

然后您可以使用通知,在 parent 中创建观察者,然后在 child 视图控制器中 posting。 在 parent

override func viewDidLoad(){
 NotificationCenter.default.addObserver(self, selector: #selector("yourSelectorName"), name: "NotificationName", object: nil)

并在 child post 中。

NotificationCenter.default.post(name: "notificationName", object: nil, userInfo: ["your data array "])

如果通知名称不是字符串,您必须为其创建一个名称,并且您可以在 userInfo 中传递或不传递数据。

Swift 5, Xcode 10.3

使用以下任何一种方法

1.Access 通过 self.navigationController.viewControllers 引用 parentVC,然后使用该引用访问变量和设置数据

2.you 可以使用 unwind segue

3.use 委托协议

如果您需要更多详细信息,请参阅