【问题标题】:Load All TabBar Views加载所有 TabBar 视图
【发布时间】:2012-03-01 10:39:27
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: ios uitabbarcontroller


    【解决方案1】:

    斯威夫特 5:

    viewControllers?.forEach {
      if let navController = $0 as? UINavigationController {
         let _ = navController.topViewController?.view
      } else {
          let _ = $0.view.description
        }
     }
    

    【讨论】:

      【解决方案2】:

      斯威夫特 3:

      在您的 UITabBarController 的 viewDidLoad()

      for viewController in self.viewControllers! {
          _ = viewController.view
      }
      

      【讨论】:

        【解决方案3】:

        如果您将视图初始化代码移动到 loadView 而不是 viewDidLoad,您可以通过调用 viewController.view 来强制加载作为 UITabBarController 一部分的每个 UIViewController。这是因为 UIViewController 会在请求时通过 loadView 函数创建视图对象。

        for(UIViewController * viewController in  tabBarController.viewControllers){
           viewController.view;
        }
        

        或者更简单

        [tabBarController.viewControllers makeObjectsPerformSelector:@selector(view)];
        

        【讨论】:

        • 在 for 循环中,我认为您的意思是 viewController.View。有效!
        • 我认为您的第二个选项是 @selector(view)。
        • +1:为我工作,稍作调整。我刚刚将-(void)loadView{[self.tabBarController.viewControllers makeObjectsPerformSelector:@selector(view)];} 添加到我的视图控制器中。
        • 这在 iOS 7 中有改变吗?
        【解决方案4】:

        如果标签栏控制器下的所有视图控制器都嵌入了导航栏:

        斯威夫特 3

        for navViewController in self.viewControllers! {
            _ = navViewController.childViewControllers[0].view
        }
        

        User Panda 的解决方案对我不起作用。

        【讨论】:

          【解决方案5】:

          在 iOS 8 中,我创建了一个名为 TSMainBarViewController 的 UITabViewController 子类。在TSMainBarViewController的函数viewDidLoad中,我刚刚添加了这段代码:

          for(UINavigationController * viewController in self.viewControllers){
              [[viewController.viewControllers firstObject] view];
          }
          

          然后所有的 viewController(UINavigationController 的根 viewController)都会加载。我所有的 viewController 都是在 StoryBoard 中创建的。请勿在 UIViewController 中实现函数loadView


          来自 EligyD 的 Swift 3 代码:

          for viewController in self.viewControllers! {
              _ = viewController.view
          }
          

          【讨论】:

            【解决方案6】:

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

            viewControllers?.forEach {
                if let navController = $0 as? UINavigationController {
                    navController.topViewController?.view
                } else {
                    $0.view.description
                }
            }
            

            【讨论】:

              【解决方案7】:

              如果你的视图之前有 UINavigationController

              for viewController in self.tabBarController!.viewControllers! {
                  var aView = viewController.topViewController as UIViewController
                  aView.view.description
              }
              

              【讨论】:

                【解决方案8】:

                Swift 等效...

                for viewController in self.tabBarController.viewControllers!
                {
                    viewController.view;
                }
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-11-08
                  • 1970-01-01
                  • 2020-10-19
                  • 1970-01-01
                  • 2016-01-20
                  • 1970-01-01
                  相关资源
                  最近更新 更多