【问题标题】:Pass Data from ViewController to ChildContainerContainer Swift将数据从 ViewController 传递到 ChildContainerContainer Swift
【发布时间】:2016-01-05 17:03:34
【问题描述】:

我正在使用 Swift。我有 2 个 ViewControllers a) ParentVC & b) ChildVC。当我实例化 chidVC 时,我想将一些数据从父级传递给子级。不知道怎么做。下面是代码

ParentVC

override func viewDidLoad() {
    let controller = storyboard?.instantiateViewControllerWithIdentifier("ChildViewController") as UIViewController!

    //I want to pass some value - For example: controller.id = 3

    addChildViewController(controller)
    containerView.addSubview(controller.view)
    didMoveToParentViewController(controller)      
}

在子 VC 内

 var id: Int?

P.S:我绝对想使用“instantiateViewControllerWithIdentifier”。我见过Passing Data Between View Controllers,但那是在 ObjC 中,我正在寻找 Swift 中的代码,因为我不知道如何翻译它。我也不想使用 prepareForSegue。

【问题讨论】:

  • 它不是重复的..整个答案都在 ObjC 中。我正在寻找 Swift 版本,因为我不知道如何翻译。在投票之前,您应该至少阅读问题(我在标题中特别提到了 Swift)
  • 你读过吗?该链接也包含 Swift 中的答案。
  • 是的,我做到了..唯一的快速解释是prepareforsegue方法..我知道该怎么做..我不知道如何在实例化时在父子之间传递数据。我没有使用prepareforsegue,因为没有发生segue。如果你知道如何..至少输入代码..
  • 我不介意你拒绝,但至少发布一个体面的答案 - 否则请删除拒绝投票,因为其他人也不会回答

标签: ios swift uicontainerview


【解决方案1】:
  • 在子视图控制器中定义 yourID。
  • 实例化后传ID

    let controller = storyboard?.instantiateViewControllerWithIdentifier("ChildViewController") as YourViewController!
    
    controller.yourID = 100
    
    presentViewController(controller, animated:true, completion:nil)
    

【讨论】:

  • 我试过了……它不起作用……错误是 UIViewController 没有成员“yourID”……但正如我在问题中提到的那样……我已经声明了 id变量(正如您所提到的)。
  • 您的 ID 是您在子视图控制器中定义的属性。 - 打开 ChildViewController.swift,定义 var yourID = 0 - 返回父 viewController 并将 ID 传递给您的孩子。 PS:防止在你的代码中定义 id。
  • 我在 Childview 控制器类中声明了 id..var id :Int?... 在 ParentVC 中.. let controller = storyboard?.instantiateViewControllerWithIdentifier("ChildViewController") as UIViewController! controller.id = 100 如果我替换“as UIViewContoller!”,我会收到一个错误,即控制器在上面的代码中没有成员“id”。正如 Tplet 建议的那样,“作为 ChildViewController!”然后我得到错误:表达式解析为一个未使用的 i-value 真的无法弄清楚:(
  • let controller = storyboard?.instantiateViewControllerWithIdentifier("ChildViewController") as UIViewController! 抱歉我的错误。将 UIViewController 更改为 ParentVC。希望对您有所帮助。
【解决方案2】:

你几乎拥有它。 在 ChildViewController 的实例化中,您需要转换为 ChildViewController 而不是 UIViewController 的类,因为 UIViewController 没有该属性。

所以替换

let controller = storyboard?.instantiateViewControllerWithIdentifier("ChildViewController") as UIViewController!

通过

let controller = storyboard?.instantiateViewControllerWithIdentifier("ChildViewController") as YourChildViewControllerClass!

编辑:
现在你可以像 truongky 一样设置属性回答:

controller.yourId = 100

【讨论】:

  • 嗨..刚刚试过这个...它在“controller.yourID”行中给了我一个不同的错误..它说表达式解析为一个未使用的 I 值
猜你喜欢
  • 2017-11-08
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多