问题
My situation looks like the following:
I have different container views. If the user triggers a tap event I create a new container and call a method on it, which sets the content of a child view controller. The problem I head was that the object (UIWebView in my case) was nat available at that time. The reason is that viewDidLoad hasn't been called at that time and the webview wasn't set up. Now I moved the initialisation of the webview in the constructor. This leads to my second issue:
On another container I load the same child view controller (with the web view on it). Because the bounds of the view are not available in the constructor I switched to auto layout. Now auto layout couldn't be applied because there was no superview. The cause of the issue was that viewDidLoad of the child view was called (where I set up my constraints) before it has been added to the container view. So there was no superview available regardles where I tried it to add as child view controller. Then I moved my auto layout setup into updateViewConstraints which works.
Now I'm wondering when viewDidLoad will be called. I cannot assume right after the initialization of the view controller, because that's not true. How could I reliable pass data to my child view controller when it's ready? Am I doing something wrong here?
When will viewDidLoad be called? Sometimes it is called right after initialization and sometimes not ...
回答1:
1)The view controller calls loadView method when its view property is requested but is currently nil.
2)After view is created view controller calls viewDidLoad method.
3)view property return created view
Summarising: viewDidLoad method called during first time you are requesting view property
来源:https://stackoverflow.com/questions/26652457/when-is-viewdidload-called-in-a-container-environment