如何将数据传递到我以编程方式呈现但在IB中创建的视图控制器?现在,当用户点击按钮但我不清楚如何将数据发送到该视图时,我已经获得了提取视图的代码。
我试图使用下面的代码,但我被告知"类型UIViewController的值没有成员"数据""
SBItem
我在这里做错了什么?
答案 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("PossTable") as! PossibleViewController
(或该场景的基类)
为什么?
这是由于名为 polymorphism 的东西。它基本上意味着您可以创建如下变量:
let vc: UIViewController = SomeOtherViewController()
虽然我们都知道vc
存储SomeOtherViewController
实例,但编译器只知道它是UIViewController
类型。因此,我们无法访问SomeOtherViewController
到vc
的成员。
instantiateViewControllerWithIdentifier
基本上是一回事。它返回类型UIViewController
的值。这导致编译器不知道它实际上是PossibleViewController
。这就是它无法找到data
属性的原因。
因此,为了让编译器知道,您需要将返回值强制转换为所需类型,因为您知道它必须包含PossibleViewController
的实例。