【问题标题】:TabbarController child controller always return nil - Swift 4TabbarController 子控制器总是返回 nil - Swift 4
【发布时间】:2018-09-09 21:27:22
【问题描述】:

我正在尝试从子控制器访问对象,但它总是返回 nil。请检查以下代码。

let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let vc: UITabBarController = mainStoryboard.instantiateViewController(withIdentifier: "TabBarController") as! UITabBarController
vc.selectedIndex = 2
let vc1 = vc.viewControllers?[2] as? FormViewController //this line returns nil
vc1?.fillUserData(dataDic: convertJsonStringToDictionary(jsonString: decodedURL))
vc1?.formViewDelegate = self
self.present(vc, animated: true, completion: nil)

请多指教。

【问题讨论】:

  • 它可能为零,因为第三个视图控制器不是FormViewController。也许它是一个导航控制器。
  • 我确定第三个视图控制器是 formviewcontroller 并且它嵌入在导航控制器中。
  • 这就是我的全部观点。 vc.viewControllers?[2]不是FormViewController,而是UINavigationController。这就是为什么你会得到nil

标签: swift uiviewcontroller uitabbarcontroller uitabbar


【解决方案1】:

根据您的 cmets,第三个选项卡实际上是 UINavigationController,其中 FormViewController 作为其 rootViewController

将您的代码更新为:

if let nc = vc.viewControllers?[2] as? UINavigationController, let vc1 = nc.topViewController as? FormViewController {
    vc1.fillUserData(dataDic: convertJsonStringToDictionary(jsonString: decodedURL))
    vc1.formViewDelegate = self
}

【讨论】:

    【解决方案2】:

    你可以试试

    let nav = vc.viewControllers?[2] as? UINavigationController
    let vc1 = nav?.topViewController as? FormViewController
    

    注意:您不应在此处访问任何 UI 元素

    vc1?.fillUserData(dataDic: convertJsonStringToDictionary(jsonString: decodedURL))
    

    因为它会使应用程序崩溃

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 2015-12-28
      • 2016-12-07
      • 2019-05-31
      • 1970-01-01
      • 2018-02-10
      • 2017-07-09
      相关资源
      最近更新 更多