簡體   English   中英

為什么不調用 viewDidLoad 函數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM