【问题标题】:Preloading view from a UITabBar从 UITabBar 预加载视图
【发布时间】:2012-12-02 22:06:06
【问题描述】:

我有一个加载 UITabBarController 的类。每个选项卡都会打开一个 UINavigationController。

我正在尝试在我的 UINavigationControllers 中预加载视图。我试过这样做:

UITabBarController * tabBarController = (UITabBarController *)self.centerController;
NSArray *myViewControllers = tabBarController.viewControllers;
for (UINavigationController *navViewController in myViewControllers)
{
    [navViewController loadView];
}

我尝试了不同的东西,但它永远不会被加载。我做错了吗?

【问题讨论】:

    标签: ios uitabbarcontroller preload


    【解决方案1】:

    谢谢 Or Arbel,您实际上帮助我理解了这个问题。我不得不在 UINavigationController 内的第一个 UIViewController 上调用 view。这是有效的代码:

    UITabBarController * tabBarController = (UITabBarController *)self.centerController;
    NSArray *myViewControllers = tabBarController.viewControllers;
    for (UINavigationController *navViewController in myViewControllers)
    {
        [[navViewController.viewControllers objectAtIndex:0] view];
    }
    

    【讨论】:

      【解决方案2】:

      如果您使用自动布局,您必须告诉视图相应地布局其子视图。

      试试这个

      UITabBarController * tabBarController = (UITabBarController *)self.centerController;
      NSArray *myViewControllers = tabBarController.viewControllers;
      for (UINavigationController *navViewController in myViewControllers) {
           UIViewController *ctrl = navViewController.topViewController;
           [ctrl.view setNeedsLayout];
           [ctrl.view layoutIfNeeded];
      }
      

      【讨论】:

        【解决方案3】:

        试试

        UITabBarController * tabBarController = (UITabBarController *)self.centerController;
        NSArray *myViewControllers = tabBarController.viewControllers;
        for (UINavigationController *navViewController in myViewControllers)
        {
            [navViewController view];
        }
        

        【讨论】:

        • 不走运。我认为问题可能来了,因为我有一个奇怪的结构:我的 UIViewController 嵌入了一个 UITabBarController,它嵌入了几个 UINavigationController,它嵌入了一个 UIViewController。我尝试加载他们每个人的视图,但仍然无法正常工作。
        【解决方案4】:
        extension UITabBarController {
            func preload() {
                children.forEach { _ = $0.view }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多