web-dev-qa-db-ja.com

UITabBarControllerにすべてのビューをロードする方法は?

この質問に関連する投稿で、関連性のある最新の回答が見つかりませんでした。

起動時にすべてのビューコントローラをロードしたいと思います。現在、期待どおりに起動しますが、バーアイテムを(初めて)タップすると、まだロードされていないため、ロードが少し遅れます。

どうすればそれを行うことができますかSwift?

ありがとう。

12
Sam

UIViewControllerのビューをプリロードするには、そのviewプロパティにアクセスするだけです。

let _ = myViewController.view

すべてのViewControllerをUITabBarControllerにプリロードするには、次の操作を実行できます。

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

またはもう少しコンパクトに:

tabBarController.viewControllers?.forEach { let _ = $0.view }
18
Robert

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に追加すると、うまくいくはずです...

5
JRafaelM

上記のRobertの答えは私にとってはうまくいきましたが、各タブの最初のビューコントローラーとしてUINavigationControllersを使用しました。したがって、私は電話しなければなりませんでした

viewControllers.forEach { $0.view }

ルートビューコントローラーもロードするために、UINavigationControllers内にあります。それがサムを助けてくれることを願っています。

3
M. Daigle

送信とサブコントローラーの両方を準備する場合は、viewWillAppear(Bool)も呼び出す必要があります。

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

これを無視すると、ビューはナビゲーションとタブバーの下に表示されます。

0
Agisight