如何在 UITabBarController 中加载所有视图?

Posted

技术标签:

【中文标题】如何在 UITabBarController 中加载所有视图?【英文标题】:How to load all views in UITabBarController? 【发布时间】:2016-01-20 14:17:45 【问题描述】:

我没有在与此问题相关的帖子中找到相关且最新的答案。

我想在启动时加载所有视图控制器。目前它按预期启动,但是当我点击一个栏项(第一次)时,加载它时会有一点延迟,因为它还没有加载。

我怎么能用 Swift 做到这一点?

谢谢。

【问题讨论】:

【参考方案1】:

要预加载UIViewController 的视图,只需访问其view 属性:

let _ = myViewController.view

要在UITabBarController 上预加载所有视图控制器,您可以:

if let viewControllers = tabBarController.viewControllers 
    for viewController in viewControllers 
        let _ = viewController.view
    

或者更简洁一点:

tabBarController.viewControllers?.forEach  let _ = $0.view 

【讨论】:

谢谢罗伯特,不幸的是我已经尝试过这个解决方案,并且 swift 给 viewController.view 一个错误:'Expression resolves to an unused l-value' 嗯,我没有收到那个错误。您可以尝试执行以下操作:let _ = viewController.view 是的,应该可以;在操场外使用时,我确实遇到了这个错误。我会更新答案... 当我尝试let _ = viewController.view时,我没有收到错误消息,但是当我在 ViewControllers 的 viewdidload 方法中设置断点时,它似乎不起作用,直到我实际点击栏时才会调用它们物品。我尝试了您对 TabBarController 的 viewDidLoad 方法的建议是否正确? @DanBeaulieu 是的;如果您使用的是故事板,那么标签栏控制器应该可以通过(window?.rootViewController as? UITabBarController)(或类似的东西)访问。【参考方案2】:

结合 Robert 和 M. Daigle 的解决方案,我想出了这样的方法:

for viewController in tabBarController?.viewControllers ?? [] 
    if let navigationVC = viewController as? UINavigationController, let rootVC = navigationVC.viewControllers.first 
        let _ = rootVC.view
     else 
        let _ = viewController.view
    

将此添加到您的第一个 ViewController 的 ViewDidLoad 中,应该可以解决问题...

【讨论】:

【参考方案3】:

上面罗伯特的回答对我有用,但我将 UINavigationControllers 作为每个选项卡的初始视图控制器。因此我不得不打电话

viewControllers.forEach  $0.view 

在我的 UINavigationControllers 中,以便同时加载它们的根视图控制器。希望对 Sam 有所帮助。

【讨论】:

【参考方案4】:

如果你想同时准备提交和子控制器,你还必须调用viewWillAppear(Bool)

tabBarController.viewControllers?.forEach 
    let _ = $0.view
    $0.viewWillAppear(true)

忽略这会导致视图位于导航栏和标签栏下方。

【讨论】:

以上是关于如何在 UITabBarController 中加载所有视图?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 UITabBarController 内显示 SFSafariViewController?

如何在 UITabBarController 中向 UINavigationController 添加右键?

如何在 UINavigationController 中嵌入 UITabBarController?

如何从 View 获取数据到 UITabBarController

如何在特定索引处显示 UITabBarController?

如何防止 UITabBarController 更新子视图?