TabbarController 子控制器总是返回 nil - Swift 4
Posted
技术标签:
【中文标题】TabbarController 子控制器总是返回 nil - Swift 4【英文标题】:TabbarController child controller always return 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
。
【参考方案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))
因为它会使应用程序崩溃
【讨论】:
以上是关于TabbarController 子控制器总是返回 nil - Swift 4的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3:将数据从 TabBarController 传递到子视图控制器
iOS 项目架构tabbarController 嵌套 navbarController
UIViewController 上的自定义属性,如 splitViewController 或 tabBarController