如何将数据传递给 iOS swift 中的前一个 viewController?

how to pass data to previous viewController in iOS swift?

我的问题是重复的,但我不需要合适的答案。另外,我之前也提过同样的问题 how to callback the array of data to another viewController in iOS Swift

我有一个名为 CreateCardViewController 的 parent viewController 和一个名为 webViewController 的 child 控制器。

在 parent viewController 中,我使用 carbonKit 来显示标签栏菜单。当标签栏菜单第一个索引是 webViewController(那是一个 child 控制器)。

我的问题是:如何从child控制器向parent控制器发送数据?

例如:从child,viewController会得到标签栏菜单项的列表。获取标签栏菜单项后,我需要将菜单项发送到 parent viewController 以显示标签栏。

这是我正在尝试做的清晰图片:

在您的自定义 ChildViewController 上添加 属性parentViewController 并在您创建该子视图控制器时设置它。然后,在父 viewcontroller 上实现特定方法,从子视图控制器接收数据。

protocol ParentViewControllerProtocol {
    func receiveChildData(_ child: UIViewController, data: Any)
}

class ChildViewController: UIViewController {
    var parentViewController: ParentViewControllerProtocol!

    func timeToSendDataToParentViewController() {
         parentViewController.receiveChildData(self, data: self.data)
    }
}

class ParentViewController: UIViewController, ParentViewControllerProtocol {
     func receiveChildData(_ child: UIViewController, data: Any) {/*handle data*/}

     func addChildViewController() {
        let child = ChildViewController();
        child.parentViewController = self
        // do the rest of adding child to parent
     }
}

您可以像@Aqua 所说的那样使用委托。或对此进行观察。

class ParentViewController: UIViewController {
 override func viewDidLoad() {
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self, selector: #selector(self.updateParentViewController(_:)), name: Notification.Name(rawValue: "updateParentViewController"), object: nil) 
 }
@IBaction func updateParentViewController(_ notification: NSNotification){
if let receivedData = notification.userInfo?["data"] as? Any {
    //use received data 
    // update your parentViewController. 
}
}
}

//.............

class ChildViewController: UIViewController {
     override func viewDidLoad() {
        super.viewDidLoad()
}
func sendDataToParentViewController() {
        let dataDict:[String: Any] = ["data"://what you want to send.]
        NotificationCenter.default.post(name: . updateParentViewController, object: nil, userInfo: dataDict)
    }
}

这对我有用。