var messageViewController: MessageViewController?
var settingsViewController: SettingsViewController?
var otherViewController: OtherViewController?
override func viewDidLoad() {
messageViewController = //the first one
settingsViewController = //the second one
otherViewController = //the third one
}
然后在代码中,我可以在需要时调用这些控制器中的方法。
messageViewController.reloadData()
答案 0 :(得分:1)
试试这个,
let firstViewController = self.viewControllers![0] as FirstViewController
let secondViewController = self.viewControllers![1] as SecondViewController
依旧......
答案 1 :(得分:1)
viewControllers
的{{1}}属性是对每个内容视图控制器的引用数组。如果您确切知道每个索引处的控制器,则只需从此数组中分配变量:
UITabBarController
甚至可以使变量计算属性:
override func viewDidLoad() {
super.viewDidLoad()
messageViewController = viewControllers![0] as! MessageViewController
settingsViewController = viewControllers![1] as! SettingsViewController
otherViewController = viewControllers![2] as! OtherViewController
}
答案 2 :(得分:0)
您必须使用delegate protocol
通过different View Controllers
发送变量或调用方法。我已经在另一篇文章中回答了这个问题,所以请查看我的答案:
答案 3 :(得分:0)
另一个解决方案(取决于您的需求)是为多个(所有视图控制器)关系实现一个(无论谁调用reloadData)。实现此目的的最简单方法是通过通知。您可以阅读有关他们的更多信息here。
通过这种方式,您的tabBar不必知道它的儿童公共方法,而且不关心谁在听它的通知(甚至可能是桌面视图,细胞或其他)。