0

单击图像时,我正在对我的父 VC 执行 segue。我想将数据从子 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
            }
        }
    }
}
4

4 回答 4

1

一种策略是将父母设置为孩子的代表。prepare(for:sender:)您将在函数中创建这种关系。

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

于 2019-08-22T18:20:00.777 回答
1

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

于 2019-08-22T18:41:23.900 回答
1

您可以使用 3 种方法将数据从子 ViewController 分配回父 ViewController,如前面的答案中所述,您可以使用委托或 clousures,但由于您不想处理

如果 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 中传递或不传递数据。

于 2019-08-22T18:44:43.480 回答
1

斯威夫特 5,Xcode 10.3

使用以下任何一种方法

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

2.你可以使用unwind segue

3.使用委托协议

如果您需要更多详细信息,请参阅 https://stackoverflow.com/a/9736559/10579134

于 2019-08-23T08:00:07.593 回答