【问题标题】:Swift - Pass data from parent view controller to child view controllerSwift - 将数据从父视图控制器传递到子视图控制器
【发布时间】: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的代码,而不是问题中的代码

标签: ios swift


【解决方案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。非常感谢:)
猜你喜欢
  • 2018-12-23
  • 1970-01-01
  • 2020-04-01
  • 2017-01-10
  • 1970-01-01
  • 2015-08-06
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多