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 您似乎在谈论三个控制器:EventsMainController
、EventsDetails
和一个子控制器。后者是什么?
@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 传递到子视图 [重复]