在IOS 4.x或更低版本中,在向视图添加子视图时未调用viewDidAppear方法,为什么?

时间:2011-11-11 03:19:41

标签: ios4 delegates uiviewcontroller ios5 viewwillappear

在iOS 4.x或更低版本,viewDidAppear和viewWillAppear,viewDidDisappear和viewWillDisappear中,不会调用此类ViewController的委托方法。相同的方法适用于iOS 5.x。

为什么呢?这是iOS 4.x或更低版本中的错误。因为在iOS 5.x中,所有这些方法都以适当的方式和顺序被调用。

提前致谢, Mrunal

2 个答案:

答案 0 :(得分:3)

对于IOS4.x,我使用UINavigationController委托方法,如下所示:

-(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];
    }
}

我希望这有帮助!

答案 1 :(得分:2)

如果您的视图控制器是另一个视图控制器的子视图(即它是UIViewController中的UINavigationController,反之亦然等),则不会调用子视图的viewDidAppear,viewWillAppear等方法。解决方案是让父母调用它们:

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

我知道这是通过iOS 4.3发生的。在iOS 5中,有一组专门用于处理这些案例的新方法:Implementing a Container View Controller