2012-07-23 59 views
0

我正在使用pushViewController在我的应用程序中推送视图。按后退按钮约95%的时间就像你期望的那样。但是,如果我尽可能快地进出视野,我会遇到一种情况,即顶部栏像流行音一样移动,但视图显示。在这种状态下,我剩下一个后退按钮,(在正常操作中,我已将该按钮的文本更改为“取消”)。按下后会再次对顶部条形进行动画处理,然后我在顶部条中没有任何按钮,并且我被卡在视图中。pushViewController后跟'后退'按钮有时不弹出视图

你知道这里可能会发生什么吗?这里有一些更多的细节:

副视点称这些一次或两次:

[[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]; 

}

请让我还是知道,如果你需要更多的代码,如果我能更好地解释事情。

---编辑---- 我也打电话给谷歌分析在视图中会出现。我记得在我的应用程序这引起其他问题:

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

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

该代码被放在我的实际视图(不BaseViewController)。

+0

您是否试过使用标准后退按钮而不是定义自己的后退按钮? – 2012-07-23 11:39:38

+0

可能是导航堆栈已损坏。例如:你在viewDidLoad中推入了另一个视图控制器 – NeverBe 2012-07-23 14:07:33

回答

1

我发现了这个问题。问题在于我在viewDidLoad中调用setNavigationBarHidden:NO with animated: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]; 
} 

感谢您的帮助家伙!