为什么不调用 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
方法将只被调用一次,您将遇到视觉错误。如果您想将模式的样式代码留在它的文件中,您可以创建实例函数,它将 return 这个控制器包装和样式化。
extension YourModalViewController {
func wrappedInNC() -> UINavigationController {
let nc = UINavigationController(rootViewController: controller)
// Styling code.
return nc
}
}
我想在 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
方法将只被调用一次,您将遇到视觉错误。如果您想将模式的样式代码留在它的文件中,您可以创建实例函数,它将 return 这个控制器包装和样式化。
extension YourModalViewController {
func wrappedInNC() -> UINavigationController {
let nc = UINavigationController(rootViewController: controller)
// Styling code.
return nc
}
}