9

iPhone でのシナリオ:

ユーザーが戻るボタンをタップすると、UINavigationBarデリゲート メソッド ( のサブクラスで実装) が次のようにをUINavigationController返します。YES

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
{
    // Verify stuff...

    return YES;
}

現在、docsによると、ナビゲーションバーとコンテンツの同期を維持するのはアプリの責任であり、それを行う場所はデリゲートメソッドにあります

- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item

問題は、didPopItemナビゲーション バーのポップ アニメーション シーケンスが終了した後にのみ呼び出されることです。そのため、[self popViewControllerAnimated: NO]そこを呼び出すと、最初にナビゲーション バーがスライドし、次にコンテンツがスライドします。

そして、それは間違っているように見えます。

pop...デリゲートメソッドでナビゲーション コントローラーを呼び出すと、shouldPop...アニメーションがオーバーラップしているというエラー メッセージが表示され、最終状態がクリーンではありません。

だから私の質問は、UINavigationController のコンテンツを変更する別の方法はありますか?

対象OSはiOS4.2以降です。

戻るボタンの代わりに別の左ボタンを作成できることは承知していますが、デリゲートを使用する方がクリーンであることがわかりました。さらに、「実際の」戻るボタンが必要です。

4

2 に答える 2

3

UINavigationController を使用している場合、これを自分で管理する必要はありません。UINavigationController を使用するだけで、多くの問題を解決できます。ナビゲーション バーの項目と共にコンテンツ ビューをポップする処理を行います。

于 2013-03-14T05:53:59.870 に答える
1

これを試して:

viewControllerA と viewControllerB があるとします。viewControllerA は最初のもので、navigationBar を必要とせず、viewControllerB は必要とします。

viewWillAppearviewControllerAのメソッドに次のコードを追加します。

[self.navigationController setNavigationBarHidden:YES animated:YES];

viewControllerB をポップするときは、アニメーションで行います。両方のアニメーションは自動的に同期されます。

これがiOS4.2で有効かどうかはわかりません

于 2013-03-14T09:38:29.880 に答える