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 */
    }
}