0

アプリケーションでビューをプッシュするために pushViewController を使用しています。戻るボタンを押すと、期待どおりに約 95% の確率で機能します。しかし、できるだけ早くビューに出入りすると、ポップが発生したかのようにトップバーが移動する状態に遭遇しますが、ビューは言います。この状態では、戻るボタンが残っています (通常の操作では、このボタンのテキストを「キャンセル」に変更しています)。押し戻すと、トップバーが再びアニメーション化され、トップバーにボタンがなくなり、ビュー内で立ち往生します。

ここで何が起こっているのか分かりますか?詳細は次のとおりです。

サブビューはこれらを 1 回か 2 回呼び出します。

[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
[[UIApplication sharedApplication] endIgnoringInteractionEvents];

サブビューも BaseViewController を拡張しています。このベース コントローラー内では、すべてのビュー メソッドがオーバーロードされます (それらは単に super を呼び出します)。興味深いものは次のとおりです。

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

- (void)customizeNavigationBar
{
    [self.navigationController.navigationBar setTintColor:UIColorFromRGB(kNavigationBackgroundColor)];
    UIBarButtonItem *backButton_ = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"ID_BUTTON_BACK", @"") style:UIBarButtonItemStyleBordered target:self action:nil];
    self.navigationItem.backBarButtonItem = backButton_;
    [backButton_ release];

}

さらにコードが必要な場合、またはより適切に説明できる場合はお知らせください。

--- 編集 ---- ビューで Google アナリティクスも呼び出すと表示されます。これにより、アプリで他の問題が発生したことを覚えています。

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

    NSError *error;
    if (![[GANTracker sharedTracker] trackPageview:@"/app_new_page"
                  withError:&error]) {    }
}

このコードは、実際のビュー (BaseViewController ではありません) に配置されています。

4

1 に答える 1

1

問題を見つけました。問題は、viewDidLoadでanimated:NOを指定してsetNavigationBarHidden:NOを呼び出し、アニメーションなしでナビゲーションバーを表示していましたが、animated:YESを指定してpushViewContollerを使用していたことです。

- - - 元は - - -

[self.navigationController pushViewController:controller animated:YES];

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.navigationController setNavigationBarHidden:NO animated:NO];
}

解決策は、viewDidLoadからsetNavigationBarHiddenを削除してviewWillAppearに移動し、ビューがアニメーション化されたのと同じ方法でアニメーション化することでした。ナビゲーションバーがすぐに表示されていたため、View Controllerのアニメーション化(スタックへのプッシュ)が完了する前に押し戻すことができ、これらすべての問題が発生しました。

- - - 解決 - - -

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:NO animated:animated];
}

助けてくれてありがとう!

于 2012-07-24T05:39:15.530 に答える