如果有人有使用它的经验,我可以使用一些帮助调试此问题。我有一个UITabBarController作为我的根视图控制器。每个选项卡的第一个视图控制器是UINavigationController。
标签1: 带有地图的视图是第一个viewController。 当你按下标注时,运行以下代码:
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
[self performSegueWithIdentifier:@"ShowLocationDetails" sender:self];
}
在故事板中,我将其连线为Push
。
在第一个viewController上,因为我有一张地图而又不想有导航栏显示,所以我这样做:
FirstViewController <UINavigationControllerDelegate>
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
[self.navigationController setNavigationBarHidden:YES animated:NO];
}
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
[self.navigationController setNavigationBarHidden:YES animated:NO];
}
在我推入堆栈的第二个视图控制器上,我确实需要导航栏,所以我有这个代码:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
if ([viewController isKindOfClass:[FirstViewController class]]) {
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
else {
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
}
标签2: 现在只是一个tablview。
如果我执行以下简单步骤,我的应用可能会崩溃:
按标注按下LocationDetails。 按返回返回First View Controller 按tab键转到TableViewController 按Tab键返回地图,然后使用EXC_BAD_ACCESS将其崩溃。我试过运行仪器,但我不知道它是什么意思:
如果我启动应用程序,并且只是整天在标签之间切换而不将新控制器推到标签1上的堆栈上,它就不会崩溃。
如果我删除了navigationController的willShowViewController委托方法,它也不会崩溃。但当然,我的导航栏不是我想要的。
有什么想法?谢谢!
EDITED 所以我尝试了Nuzhat说的话,我也遇到了同样的问题。我试过了两个
self.navigationController.navigationBar.hidden = YES;
和
self.navigationController.navigationBardHidden = YES;
并且它不是我正在寻找的解决方案。当我推送到下一个视图控制器时,导航栏不在那里。当然在那个viewController的viewDidLoad中,我设置了
self.navigationController.navigationBar.hidden = NO;
然后我回到FirstViewController,然后切换标签,仍然崩溃。隐藏导航栏然后再次显示它似乎存在问题。