如何将数据传递到父视图控制器

时间:2019-08-22 18:05:39

标签: ios swift uinavigationcontroller segue viewwilldisappear

单击图像时,我正在对我的父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
            }
        }
    }
}

4 个答案:

答案 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