为什么不调用viewDidLoad函数?

时间:2019-07-31 10:14:11

标签: ios uibarbuttonitem

我想更改UIBarButtonnavigationBar的颜色。为此,请在viewDidLoad:中输入以下行:

navigationController?.navigationBar.tintColor = .white 

一切正常,直到我开始注意到一些奇怪的东西。 UIBarButton用于关闭UIViewController。当按下它时,我只是解开了viewController。但是,如果再次显示(viewController,则UIBarButton的颜色不是白色,它将得到应用程序的tintColor

进行一些调试之后,我注意到viewDidLoad:仅在被撤消并再次显示后不再被调用。我的viewController具有不同颜色的原因是因为我在UIBarButton中更改了颜色。当然,当不调用viewDidLoad:时,颜色不会改变。

对我来说,这是一个有趣的发现,即iOS并未针对已经提出的viewDidLoad:调用viewDidLoad:。可能是由于优化,因为每次绘制整个UI效率不高。

我对这个问题的解决方法可以是更改颜色,而不是UIViewController,而是viewDidLoad:。但是,解决问题的方法正确吗?在上述情况下为什么不调用viewDidAppear:

1 个答案:

答案 0 :(得分:0)

您似乎创建并存储了视图控制器,但将其包装在let controller = YourModalViewController() ... func presentMyModal() { present(UINavigationController(rootViewController: controller)) } 中:

viewDidLoad

在这种情况下,您的extension YourModalViewController { func wrappedInNC() -> UINavigationController { let nc = UINavigationController(rootViewController: controller) // Styling code. return nc } } 方法将仅被调用一次,并且您将遇到视觉错误。如果要将模式的样式代码留在文件中,则可以创建实例函数,该函数将包装并设置样式后返回此控制器。

torrents