我有一个VC,它是以模式呈现的,但VC被封装在UINavigationController
中。为了呈现连接到我的VC的导航控制器,我在故事板中添加了一个标识符,并呈现如下:
if let nvc = self.storyboard?.instantiateViewController(withIdentifier: "EditTaskNavController") {
self.present(nvc, animated: true){
success(true)
}
}
这很好。当我试图将数据传递给我的VC时,问题就出现了。因为nvc是导航控制器,我试图用nvc.rootViewController
获取VC,但我得到了错误:Value of type 'UIViewController' has no member 'rootViewController'
。如果我打印出nvc
,我会发现它实际上是一个UINavigationController
。我认为发生这个错误是因为我使用instantiateViewController
从情节提要中获取导航控制器,但我不明白为什么它会打印成UINavigationController
。
我也尝试过转换nvc as? TaskEditViewController
,但nvc是导航控制器,而不是vc,所以这不起作用。
最终,我想在模态演示之前将数据传递给我的VC:vc.detail = "example"
有什么办法吗?
当它返回类型为UIViewController
的泛型对象时,您需要将instantiateViewController
的结果强制转换为与在情节提要中设置标识符的vc类型相同的适当类型,因此将其强制转换为UINavigationController
,同样的情况也适用于需要强制转换为的属性topViewController
if let nvc = self.storyboard?.instantiateViewController(withIdentifier: "EditTaskNavController") as? UINavigationController, let top = nvc.topViewController as? TaskEditViewController {
top.someProperty = /* some value */
self.present(nvc, animated: true) {
/* some code */
}
}