iOS:包裹在导航控制器中时将数据传递给模态 VC
iOS: Pass data to modal VC when wrapped in a Navigation Controller
我有一个 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"
知道怎么做吗?
您需要将 instantiateViewController
的结果转换为适当的类型,作为您在情节提要中设置标识符的 vc 的类型,因为它 returns 是类型 UIViewController
,因此将其转换为 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 */
}
}
我有一个 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"
知道怎么做吗?
您需要将 instantiateViewController
的结果转换为适当的类型,作为您在情节提要中设置标识符的 vc 的类型,因为它 returns 是类型 UIViewController
,因此将其转换为 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 */
}
}