Как передать данные в предыдущий viewController в iOS Swift? - PullRequest
0 голосов
/ 02 марта 2020

Мой вопрос повторяется, но мне не нужен подходящий ответ. Кроме того, до того, как я поднял то же самое, как вызвать массив данных для другого viewController в iOS Swift

У меня есть родительский viewController с именем CreateCardViewController и дочерний контроллер с именем webViewController.

В родительском viewController я использовал carbonKit для отображения меню панели вкладок. Когда первым индексом меню панели вкладок является webViewController (это дочерний контроллер).

Мой вопрос: Как отправить данные на родительский контроллер с дочернего контроллера?

Например: от дочернего элемента viewController получит список пунктов меню панели вкладок. После получения пунктов меню панели вкладок мне нужно отправить пункты меню в родительский viewController, чтобы показать панель вкладок.

Вот ясная картинка, которую я пытаюсь сделать:

enter image description here

Ответы [ 2 ]

1 голос
/ 02 марта 2020

вы можете использовать делегат, как то, что сказал @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)
    }
}

это работает для меня.

0 голосов
/ 02 марта 2020

В пользовательском ChildViewController добавьте свойство parentViewController и установите его при создании этого дочернего контроллера представления. Затем внедрите указанный метод c в родительском 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
     }
}
...