如何通过presentViewController将对象传递到视图中?

时间:2016-09-13 05:31:22

标签: ios swift presentviewcontroller

如何将数据传递到我以编程方式呈现但在IB中创建的视图控制器?现在,当用户点击按钮但我不清楚如何将数据发送到该视图时,我已经获得了提取视图的代码。

我试图使用下面的代码,但我被告知"类型UIViewController的值没有成员"数据""

SBItem

我在这里做错了什么?

3 个答案:

答案 0 :(得分:0)

就像Rob提到的那样,您必须将实例化的视图控制器强制转换为具有data的{​​{1}}字段的特定类

答案 1 :(得分:0)

UIStoryboard.instantiateViewControllerWithIdentifier()返回UIViewController个对象。您必须将此对象强制转换为ViewController。

您的方法应如下所示:

@IBAction func showPossButton(sender: UIButton) {
    print("Show data table.")

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    if let vc = storyboard.instantiateViewControllerWithIdentifier("PossTable") as? PossTableViewController {
        var data: Data! = self.selectedData // Data from your parent VC
        vc.data = data
        self.presentViewController(vc, animated: true, completion: nil)
    }
    else {
        print("Can't cast view controller to PossTableViewController")
    }
}

答案 2 :(得分:0)

像罗布在评论中所说:

  

let vc = storyboard.instantiateViewControllerWithIdentifier("PossTabl‌​e") as! PossibleViewController(或该场景的基类)

为什么?

这是由于名为 polymorphism 的东西。它基本上意味着您可以创建如下变量:

let vc: UIViewController = SomeOtherViewController()

虽然我们都知道vc存储SomeOtherViewController实例,但编译器只知道它是UIViewController类型。因此,我们无法访问SomeOtherViewControllervc的成员。

instantiateViewControllerWithIdentifier基本上是一回事。它返回类型UIViewController的值。这导致编译器不知道它实际上是PossibleViewController。这就是它无法找到data属性的原因。

因此,为了让编译器知道,您需要将返回值强制转换为所需类型,因为知道它必须包含PossibleViewController的实例。