Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In IOS 4.x or lower, viewDidAppear method is not getting called while adding subview to a view, why?

In iOS 4.x or lower, viewDidAppear and viewWillAppear, viewDidDisappear and viewWillDisappear, such ViewController's delegate methods are not getting called. The same methods work fine with the iOS 5.x.

Why? Is it a bug in iOS 4.x or lower. Because in iOS 5.x all those methods gets called in proper manner and sequence.

Thanks in advance, Mrunal

like image 595
Mrunal Avatar asked Nov 11 '11 03:11

Mrunal


2 Answers

For IOS4.x i use the UINavigationController delegate methods like this:

-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (SYSTEM_VERSION_LESS_THAN(@"5.0")) {
        [activeView viewDidAppear:YES];
    }
}
-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (SYSTEM_VERSION_LESS_THAN(@"5.0")) {
        [activeView viewWillAppear:YES];
    }
}

I hope this helps!

like image 183
user1935005 Avatar answered Nov 13 '22 22:11

user1935005


If your view controller is a child of another view controller, (i.e. it's a UINavigationController inside a UIViewController, or vice versa, etc.), the child's viewDidAppear, viewWillAppear, etc. methods will not get called. The solution is to have the parent call into them like:

-(void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated];
    [child viewWillAppear:animated];
}

I know this happens through iOS 4.3. In iOS 5 there is a new set of methods specifically for handling these cases: Implementing a Container View Controller

like image 2
quellish Avatar answered Nov 13 '22 21:11

quellish