0

我正在使用 pushViewController 在我的应用程序中推送视图。按下后退按钮大约 95% 的时间都与您预期的一样。但是,如果我尽可能快地进出视图,我会遇到顶部栏移动的情况,就好像发生了弹出一样,但视图会显示。在这种状态下,我留下了一个后退按钮,(在正常操作中,我已将此按钮的文本更改为“取消”)。按下返回将再次为顶栏设置动画,然后我在顶栏中没有任何按钮,我被困在视图中。

你知道这里会发生什么吗?以下是更多细节:

子视图调用这些一次或两次:

[[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 Analytics in view 会出现。我记得这会导致我的应用程序出现其他问题:

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

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

这段代码被放在我的实际视图中(不是 BaseViewController)。

4

1 回答 1

1

我发现了问题。问题是我在 viewDidLoad 中调用 setNavigationBarHidden:NO 和动画:NO 来显示没有动画的导航栏,但使用 pushViewContoller 和动画:YES。

- - - 起初 - - -

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

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

解决方案是从 viewDidLoad 中删除 setNavigationBarHidden 并将其移动到 viewWillAppear 中,并以与视图动画相同的方式对其进行动画处理。由于我的导航栏立即出现,因此可以在视图控制器完成动画(推入堆栈)之前按回,从而导致所有这些问题。

- - - 解决方案 - - -

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

谢谢你们的帮助!

于 2012-07-24T05:39:15.530 回答