この質問に関連する投稿で、関連性のある最新の回答が見つかりませんでした。
起動時にすべてのビューコントローラをロードしたいと思います。現在、期待どおりに起動しますが、バーアイテムを(初めて)タップすると、まだロードされていないため、ロードが少し遅れます。
どうすればそれを行うことができますかSwift?
ありがとう。
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 }
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に追加すると、うまくいくはずです...
上記のRobertの答えは私にとってはうまくいきましたが、各タブの最初のビューコントローラーとしてUINavigationControllersを使用しました。したがって、私は電話しなければなりませんでした
viewControllers.forEach { $0.view }
ルートビューコントローラーもロードするために、UINavigationControllers内にあります。それがサムを助けてくれることを願っています。
送信とサブコントローラーの両方を準備する場合は、viewWillAppear(Bool)
も呼び出す必要があります。
tabBarController.viewControllers?.forEach {
let _ = $0.view
$0.viewWillAppear(true)
}
これを無視すると、ビューはナビゲーションとタブバーの下に表示されます。