如何以编程方式将数据传递给UITabBarController的实例

时间:2017-09-07 14:25:15

标签: ios swift uitabbarcontroller

我在故事板上有UITabBarController,相应的Swift类名为 MyTabBarController.swift 我在该类中有一个数据变量:

class MyTabBarController: UITabBarController {
    var myData: MyData?
    ...
}

我以编程方式从另一个控制器启动此标签栏控制器:

let myTabBarStoryboard = UIStoryboard(name: "myTabBar", bundle: Bundle.main)

let myTabBarController = myTabBarStoryboard.instantiateViewController(withIdentifier:"myTabBarController") as! UITabBarController // I can't cast it to MyTabBarController, because it would raise runtime error of type casting

 // now I have a data prepared for `myTabBarController` instance
 let data = prepareMyData()

// how can pass data to myTabBarController now? like I said above, the type casting to MyTabBarController is not allowed
present(myTabBarController, animated:true, completion: nil)

我的问题在于上述代码的注释,如何将数据传递给myTabBarController

(我想将数据设置为myTabBarController,以便由标签栏控制器托管的所有视图控制器访问/共享数据。

2 个答案:

答案 0 :(得分:1)

如果您无法转换为MyTabBarController,则表示您未在Interface Builder中设置正确的类型。

修复后,转换为MyTabBarController,您就可以访问该实例上的myData

答案 1 :(得分:0)

如果你的故事板有错误的引用,这不会给你一个错误。此外,如果你的故事板参考是正确的,这将完美地工作,你可以设置数据。

let myTabBarStoryboard = UIStoryboard(name: "myTabBar", bundle: Bundle.main)
if let myTabBarController = myTabBarStoryboard.instantiateViewController(withIdentifier:"myTabBarController") as? MyTabBarController {

  myTabBarController.myData = prepareMyData()
 present(myTabBarController, animated:true, completion: nil)

} else {
  print("Storyboard has wrong reference...")
}