pushViewController后跟'后退'按钮有时不会弹出视图

时间:2012-07-23 11:10:21

标签: ios cocoa-touch uiviewcontroller

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

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

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

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

子视图也在扩展BaseViewController。在这个基本控制器内部,所有的视图方法都被重载(它们只是调用超级)。可能有趣的是:

- (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。我记得这会在我的应用中引起其他问题:

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

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

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

1 个答案:

答案 0 :(得分:1)

我发现了问题。问题是我正在调用setNavigationBarHidden:NO with with animated:NO在viewDidLoad中显示没有动画的导航栏,但使用带有动画的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];
}

感谢您的帮助!