10

iOS 4.x以前では、viewDidAppearとviewWillAppear、viewDidDisappearとviewWillDisappearで、このようなViewControllerのデリゲートメソッドは呼び出されません。同じ方法がiOS5.xでも正常に機能します。

なんで?iOS4.x以下のバグですか。iOS 5.xでは、これらすべてのメソッドが適切な方法と順序で呼び出されるためです。

よろしくお願いします、Mrunal

4

2 に答える 2

3

IOS4.xiの場合、次のような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];
    }
}

これがお役に立てば幸いです。

于 2012-12-28T17:15:09.463 に答える
2

ビューコントローラが別のビューコントローラの子である場合(つまり、UIViewController内のUINavigationControllerである場合、またはその逆の場合など)、子のviewDidAppear、viewWillAppearなどのメソッドは呼び出されません。解決策は、次のように親に電話をかけてもらうことです。

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

私はこれがiOS4.3を通して起こることを知っています。iOS 5には、これらのケースを処理するための新しい一連のメソッドがあります。ContainerViewControllerの実装

于 2012-02-08T18:57:38.147 に答える