Swift-将数据从父视图控制器传递到子视图控制器

时间:2019-05-18 12:11:41

标签: ios swift

我的目标是从我的父视图控制器到子控制器检索eventId。但是似乎我的孩子视图控制器在父对象之前被实例化。如何从子控制器获取该eventId?谢谢

我正在将数据从EventsMainController传递到EventsDetails(父控制器)

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        if segue.identifier == "eventDetails" {
            let DestViewController : EventDetailsViewController = segue.destination as! EventDetailsViewController

            DestViewController.eventId = myEvents[index].uuid

        }

    }

然后在我的EventsDetail控制器中,我有一个变量,可以在其中检索它。 EventsDetails是我的父控制器,其中有我的子控制器。

 var eventId = String()

在我的子控制器中,我正在使用它来检索ID。返回零。

    var eventId = String()

    override func viewDidAppear(_ animated: Bool) {
        print(eventId)
}

1 个答案:

答案 0 :(得分:1)

在情节提要中添加Container View时,它会添加一个子视图控制器和一个从父视图控制器到子视图控制器的序列。

enter image description here

在加载父视图控制器后立即执行此命令。通过EventDetails方法将数据从InvitedController传递到prepare for segue

class EventsMainController: UIViewController {
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "EventDetails" {
            if let eventDetails = segue.destination as? EventDetails {
                eventDetails.eventId = "FromEventsMainController"
            }
        }
    }
}
class EventDetails: UIViewController {
    var eventId = String()
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {    
        if segue.identifier == "InvitedController" {
            if let invitedController = segue.destination as? InvitedController {
                invitedController.eventId = self.eventId
            }
        }
    }
}
class InvitedController: UIViewController {
    var eventId = String()
    override func viewDidLoad() {
        super.viewDidLoad()
        print(eventId)//FromEventsMainController
    }
}