加载所有TabBar视图

Lau*_*May 24 uitabbarcontroller ios

我有一个tabbar控制器作为根视图控制器.我想预先加载tab [1,2,3]的视图(选项卡0自动加载为第一个选项卡).

我基本上希望viewdidload中的代码在用户点击选项卡之前运行.

谢谢

Joe*_*ets 34

如果您使用视图初始化代码并将其移动到loadView而不是viewDidLoad,则可以通过简单地调用viewController.view来强制加载属于UITabBarController一部分的每个UIViewControllers.发生这种情况是因为UIViewController会在被要求时通过loadView函数创建视图对象.

for(UIViewController * viewController in  tabBarController.viewControllers){
   viewController.view;
}
Run Code Online (Sandbox Code Playgroud)

或者更简单

[tabBarController.viewControllers makeObjectsPerformSelector:@selector(view)];
Run Code Online (Sandbox Code Playgroud)


guo*_*zzu 15

在iOS 8中,我创建了一个名为TSMainBarViewController的UITabViewController的子类.在viewDidLoadTSMainBarViewController 的功能中,我刚刚添加了这段代码:

for(UINavigationController * viewController in self.viewControllers){
    [[viewController.viewControllers firstObject] view];
}
Run Code Online (Sandbox Code Playgroud)

然后将加载所有viewControllers(UINavigationController的root viewController).我的所有viewControllers都是在StoryBoard中创建的.不要loadView在UIViewController中实现该功能.


来自EligyD的Swift 3代码:

for viewController in self.viewControllers! {
    _ = viewController.view
}
Run Code Online (Sandbox Code Playgroud)


Sah*_*oor 8

要处理可能有也可能没有导航控制器的选项卡控制器:

viewControllers?.forEach {
    if let navController = $0 as? UINavigationController {
        navController.topViewController?.view
    } else {
        $0.view.description
    }
}
Run Code Online (Sandbox Code Playgroud)