我有一个tabbar控制器作为根视图控制器。我想预先加载tab [1,2,3]的视图(选项卡0自动加载为第一个选项卡)。
我基本上希望viewdidload中的代码在用户点击选项卡之前运行。
由于
答案 0 :(得分:33)
如果您使用视图初始化代码并将其移动到loadView而不是viewDidLoad,则可以通过简单地调用viewController.view来强制加载属于UITabBarController一部分的每个UIViewControllers。发生这种情况是因为UIViewController会在被要求时通过loadView函数创建视图对象。
for(UIViewController * viewController in tabBarController.viewControllers){
viewController.view;
}
或更简单
[tabBarController.viewControllers makeObjectsPerformSelector:@selector(view)];
答案 1 :(得分:15)
在iOS 8中,我创建了一个名为TSMainBarViewController的UITabViewController的子类。在TSMainBarViewController的函数viewDidLoad
中,我刚刚添加了这段代码:
for(UINavigationController * viewController in self.viewControllers){
[[viewController.viewControllers firstObject] view];
}
然后将加载所有viewControllers(UINavigationController的root viewController)。我的所有viewControllers都是在StoryBoard中创建的。不要在UIViewController中实现函数loadView
。
Swift 3代码:
for viewController in self.viewControllers! {
_ = viewController.view
}
答案 2 :(得分:8)
要处理可能有也可能没有导航控制器的标签控制器:
viewControllers?.forEach {
if let navController = $0 as? UINavigationController {
navController.topViewController?.view
} else {
$0.view.description
}
}
答案 3 :(得分:2)
如果标签栏控制器下的所有视图控制器都嵌入了导航栏:
Swift 3
for navViewController in self.viewControllers! {
_ = navViewController.childViewControllers[0].view
}
用户Panda的解决方案对我不起作用。
答案 4 :(得分:1)
如果您在观看之前有UINavigationController
for viewController in self.tabBarController!.viewControllers! {
var aView = viewController.topViewController as UIViewController
aView.view.description
}
答案 5 :(得分:0)
斯威夫特3:
在你的UITabBarController的viewDidLoad()
for viewController in self.viewControllers! {
_ = viewController.view
}
答案 6 :(得分:0)
斯威夫特 5:
viewControllers?.forEach {
if let navController = $0 as? UINavigationController {
let _ = navController.topViewController?.view
} else {
let _ = $0.view.description
}
}
答案 7 :(得分:-1)
Swift等同......
for viewController in self.tabBarController.viewControllers!
{
viewController.view;
}