Reputation: 47759
I have an odd case -- a view controller that creates its own view in loadView
and which is then added to an existing view.
Here is the code that creates and adds the VC:
self.doneButtonViewController = [[DoneButtonViewController alloc] init];
[self.view addSubview:self.doneButtonViewController.view];
This code is executed in viewDidLoad
of the "parent" VC.
The odd thing is that the viewWillAppear
method of the added VC is never invoked (nor is viewDidAppear
), but the viewWillDisappear
method of the added VC is invoked (at the appropriate time), just as one would expect.
Any clue as to why viewWillAppear
is not getting invoked?
Upvotes: 8
Views: 11509
Reputation: 11
As for me, adding child view controller in parent view controller can solve the problem that "viewWillAppear" of the child view controller not get called.
Upvotes: 1
Reputation: 19030
The application isn't aware of the subview's view controller if you do this, you need to introduce view controller containment to make the root view controller aware. Doing so will handle any events like this.
Because loadView
could be called more than once pre iOS 6, I'd advise creating the view controller within init
, and then add the subview within loadView
. It should be like this:
- (id)init {
...
self.doneButtonViewController = [[DoneButtonViewController alloc] init];
[self addChildViewController:self.doneButtonViewController];
[self.doneButtonViewController didMoveToParentViewController:self];
...
}
- (void)loadView {
...
[self.view addSubview:self.doneButtonViewController.view];
...
}
See "Implementing a Container View Controller" at http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html
Upvotes: 15