iOS:将数据封装在导航控制器中时传递给模态VC



我有一个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 */
}
}

最新更新