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

Posted

技术标签:

【中文标题】Swift - 将数据从父视图控制器传递到子视图控制器【英文标题】:Swift - Pass data from parent view controller to child view controller 【发布时间】:2019-05-18 12:11:40 【问题描述】:

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

我正在将数据从我的 EventsMainController 传递到 EventsDetails(Parent Controller)

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。它返回 nil。

    var eventId = String()

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

【问题讨论】:

你确定你的segue标识符是“eventDetails”吗?就这么过去了? DestViewController.eventId = myEvents[index].uuid 您似乎在谈论三个控制器:EventsMainControllerEventsDetails 和一个子控制器。后者是什么? @iDevid 是的,当我使用 segue 标识符“evenDetails”时,我在 EventDetails 中获取了我需要的所有信息 @vadian 子控制器被称为 InvitedViewController。 EventDetails 是父级。我将数据从 EventsMain 传递给 Event Details,然后传递给 InvitedController (child) 那么关键部分是将数据从Details传递给Invited的代码,而不是问题中的代码 【参考方案1】:

当您在情节提要中添加 Container View 时,它会添加一个子视图控制器以及从父视图控制器到子视图控制器的 segue。

这个 segue 在父视图控制器加载后立即执行。在prepare for segue方法中将数据从EventDetails传递给InvitedController

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
    

【讨论】:

正是我需要的。我不知道父子视图关系segue。非常感谢:)

以上是关于Swift - 将数据从父视图控制器传递到子视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3:将数据从 TabBarController 传递到子视图控制器

将 NSArray 从 UIViewController 传递到子视图 [重复]

在Android中将变量从父视图传递到子视图

将数据从父 ViewController 传递到子 VC,无需故事板 - Swift 5

如何通过调用函数将数据从视图传递到子视图?

如何在 swift 中从父视图访问容器视图子视图