- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
//很重要,每次要显示之前都将delegate设置为自己
self.navigationController.delegate = self;
_navController=self.navigationController;
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
self.navigationController.delegate = self;
_navController=self.navigationController;
}
- (void)navigationController:(UINavigationController*)navigationController willShowViewController:(UIViewController*)viewController animated:(BOOL)animated
{
if(viewController ==self){
[_navController setNavigationBarHidden:YES animated:YES];
}else{
//不在本页时,显示真正的nav bar
[_navController setNavigationBarHidden:NO animated:YES];
//当不显示本页时,要么就push到下一页,要么就被pop了,那么就将delegate设置为nil,防止出现BAD ACCESS
//之前将这段代码放在viewDidDisappear和dealloc中,这两种情况可能已经被pop了,self.navigationController为nil,这里采用手动持有navigationController的引用来解决
if(_navController.delegate == self){
//如果delegate是自己才设置为nil,因为viewWillAppear调用的比此方法较早,其他controller如果设置了delegate就可能会被误伤
_navController.delegate=nil;
}
}
}
{
[super viewWillAppear:animated];
//很重要,每次要显示之前都将delegate设置为自己
self.navigationController.delegate = self;
_navController=self.navigationController;
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
self.navigationController.delegate = self;
_navController=self.navigationController;
}
- (void)navigationController:(UINavigationController*)navigationController willShowViewController:(UIViewController*)viewController animated:(BOOL)animated
{
if(viewController ==self){
[_navController setNavigationBarHidden:YES animated:YES];
}else{
//不在本页时,显示真正的nav bar
[_navController setNavigationBarHidden:NO animated:YES];
//当不显示本页时,要么就push到下一页,要么就被pop了,那么就将delegate设置为nil,防止出现BAD ACCESS
//之前将这段代码放在viewDidDisappear和dealloc中,这两种情况可能已经被pop了,self.navigationController为nil,这里采用手动持有navigationController的引用来解决
if(_navController.delegate == self){
//如果delegate是自己才设置为nil,因为viewWillAppear调用的比此方法较早,其他controller如果设置了delegate就可能会被误伤
_navController.delegate=nil;
}
}
}