我在故事板上有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
,以便由标签栏控制器托管的所有视图控制器访问/共享数据。
答案 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...")
}