在我的TabBarViewController中,如何在viewDidLoad上为每个子视图控制器设置一个实例变量?

时间:2015-04-21 07:33:27

标签: ios swift model-view-controller

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()

4 个答案:

答案 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发送变量或调用方法。我已经在另一篇文章中回答了这个问题,所以请查看我的答案:

How to pass a variable from a class to another?

答案 3 :(得分:0)

另一个解决方案(取决于您的需求)是为多个(所有视图控制器)关系实现一个(无论谁调用reloadData)。实现此目的的最简单方法是通过通知。您可以阅读有关他们的更多信息here

通过这种方式,您的tabBar不必知道它的儿童公共方法,而且不关心谁在听它的通知(甚至可能是桌面视图,细胞或其他)。