如何将数据传递到iOS swift中的先前viewController?

问题描述 投票:0回答:2

我的问题是重复的,但我不需要合适的答案。另外,我在how to callback the array of data to another viewController in iOS Swift

之前提出了相同的要求

我有一个名为CreateCardViewController的父viewController和一个名为webViewController的子控制器。

在父viewController中,我使用carbonKit来显示选项卡栏菜单。当标签栏菜单的第一个索引是webViewController(这是一个子控制器)。

我的问题是:如何从子控制器发送数据到父控制器?

例如:从一个孩子那里,viewController将获得一个标签栏菜单项列表。在获得标签栏菜单项之后,我需要将菜单项发送到父viewController来显示标签栏。

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

enter image description here

ios swift cocoa uiviewcontroller uitabbar
2个回答
0
投票

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

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
     }
}

0
投票

您可以像@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)
    }
}

这对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.