[英]Why viewDidLoad function is not called?
我想在navigationBar
更改UIBarButton
的顏色。 為了實現這一點,在viewDidLoad:
我把這一行:
navigationController?.navigationBar.tintColor = .white
一切正常,直到我開始注意到一些奇怪的事情。 該UIBarButton
用於關閉UIViewController
。 當它被按下時,我只是關閉viewController
。 但是,如果我提出它( viewController
再次),在顏色UIBarButton
不是白色,它得到tintColor
的應用。
在做了一些調試之后,我注意到viewDidLoad:
在viewController
剛剛被解除並再次呈現后沒有被再次調用。 我的UIBarButton
具有不同顏色的原因是因為我在viewDidLoad:
更改了它的顏色。 當viewDidLoad:
沒有被調用時,當然顏色不會改變。
對我來說,這是一個有趣的發現,因為 iOS 沒有為已經呈現的UIViewController
調用viewDidLoad:
。 可能是優化的緣故,因為每次都繪制整個UI效率不高。
我對這個問題的解決方案可以是改變顏色,而不是在viewDidLoad:
,而是在viewDidAppear:
。 但是,這是解決問題的正確方法嗎? 為什么viewDidLoad:
在上述情況下沒有被調用?
看起來您創建並存儲了您的視圖控制器,但將其呈現在UINavigationController
:
let controller = YourModalViewController()
...
func presentMyModal() {
present(UINavigationController(rootViewController: controller))
}
在這種情況下,您的viewDidLoad
方法只會被調用一次,並且您將遇到視覺錯誤。 如果您想將模態的樣式代碼保留在它的文件中,您可以創建實例 func 它將返回此控制器包裝和樣式。
extension YourModalViewController {
func wrappedInNC() -> UINavigationController {
let nc = UINavigationController(rootViewController: controller)
// Styling code.
return nc
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.