6

ViewControllerがいつプッシュされたかを検出しようとしています。そこで、NavegationBarデリゲートについて、Appleのドキュメントhttp://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationBarDelegate_Protocol/Reference/Reference.htmlをフォローしましたが、作成方法がわかりませんでした。正常に動作しています。ViewControllerに次のコードをコードに配置しましたが、プッシュされていることが検出されません。私が間違っていることは何ですか?

- (void)navigationBar:(UINavigationBar *)navigationBar didPushItem:(UINavigationItem *)item, {
    NSLog(@"didPushItem: %@", item);
    [self showimage];
}
4

3 に答える 3

13

何をする必要があるのか​​明確ではありませんが、UIViewControllerそのコンテキストを識別するためのいくつかの方法があります。以下に2つあり、ドキュメントにはさらに2つあります

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

    BOOL pushed = [self isMovingToParentViewController];

    printf("viewWillAppear     %d\n", pushed);

}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    BOOL popped = [self isMovingFromParentViewController];

    printf("viewWillDisappear     %d\n", popped);

}
于 2012-08-12T15:49:31.417 に答える
5

および関連するタスクを実装する必要がUINavigationControllerDelegateあります。UIViewControllerUINavigationController

ドキュメントへのリンクは次のとおりです:http: //developer.apple.com/library/ios/#documentation/UIKit/Reference/UINavigationControllerDelegate_Protocol/Reference/Reference.html

「」のような特定のメソッドnavigationController:didPushViewController:animated:は、プロトコルに存在しません。

ただし、を使用して目的の動作を実現できると思いますnavigationController:willShowViewController:animated:。このメソッドは、のビューが表示される前、およびスタックUIViewControllerにプッシュされた後に呼び出されることに注意してください。UINavigationController

于 2012-08-12T15:19:39.217 に答える
3

この-viewWillApear方法は合理的ですが、ビューがビュー階層に挿入されようとしているときに呼び出されます。これは、必要な場合とそうでない場合があります。

プッシュ/プルの進行状況をさらに制御したい場合は、オーバーライドできます

- (void)willMoveToParentViewController:(UIViewController *)parent {
    if (nil == parent) {
        // Moving to nil parent means being removed from parent
    } else {
        // Will be inserted as a child view controller of <parent>
    }
}

- (void)didMoveToParentViewController:(UIViewController *)parent {
    if (nil == parent) {
        // Moving to nil parent means was just removed from parent
    } else {
        // Was just inserted as a child view controller of <parent>
    }
}

これらは、ナビゲーションコントローラーが子ビューコントローラーをプッシュ/ポップする直前と直後に呼び出されます。

ドキュメントから...

didMoveToParentViewController:

ビューコントローラがコンテナビューコントローラに追加またはコンテナビューコントローラから削除された後に呼び出されます。

- (void)didMoveToParentViewController:(UIViewController *)parent

パラメーター

親ビューコントローラ、または親がない場合はnil。

討論

ビューコントローラは、コンテナへの追加に反応したいときにこのメソッドをオーバーライドできます。

と...

willMoveToParentViewController:

ビューコントローラがコンテナビューコントローラに追加またはコンテナビューコントローラから削除される直前に呼び出されます。

- (void)willMoveToParentViewController:(UIViewController *)parent

パラメーター

親ビューコントローラ、または親がない場合はnil。

討論

ビューコントローラは、コンテナに追加されたことを知る必要がある場合に、このメソッドをオーバーライドできます。

于 2012-08-12T20:53:30.557 に答える