Hot Licks
Hot Licks

Reputation: 47759

viewWillAppear not invoked for subview controller

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

Answers (2)

user1806228
user1806228

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

WDUK
WDUK

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

Related Questions