UINavigationController:在一个视图上隐藏后退按钮隐藏所有视图

She*_*lam 13 iphone cocoa-touch objective-c uinavigationcontroller uinavigationitem

我有一个UINavigationController,在堆栈上包含3个UIViewControllers.

View A - is the root
View B - is pushed by View A and has `self.navigationItem.hidesBackButton = YES;`
View C - is pushed by View B and has `self.navigationItem.hidesBackButton = NO;`
Run Code Online (Sandbox Code Playgroud)

即使我将hidesBackButton设置为NO,View C也不会显示后退按钮.我该如何解决这个问题?

Mad*_*dav 15

更新
4.2中的一个可能的错误,因为它工作到4.1 sdks

我试过这个,我的工作很完美.我刚刚发布了B视图控制器(BVC)和C视图控制器(CVC)的实现.我最初的猜测是你没有设置BVC的标题viewDidLoad.

@implementation BVC


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.title = @"I am B";
}


- (void) viewWillAppear:(BOOL)animated{
    self.navigationItem.hidesBackButton = YES;
}

- (IBAction)pushB:(UIButton *)sender{
    CVC *cvc = [[CVC alloc] initWithNibName:@"CVC" bundle:nil];
    [self.navigationController pushViewController:cvc animated:YES];
    [cvc release];
}
@end

@implementation CVC

- (void) viewWillAppear:(BOOL)animated{
    self.navigationItem.hidesBackButton = NO;
}
@end
Run Code Online (Sandbox Code Playgroud)


Bog*_*tyr 8

我认为你必须推动或弹出视图控制器以影响下一个视图控制器之前设置该属性,在viewWillAppear中为当前viewcontroller设置它为时已晚.

编辑:这看起来像4.2中的错误!后退按钮保持隐藏在4.2模拟器和4.2的设备上,但它适用于3.2,4.1和4.0模拟器!

这是使用隐藏后退按钮推送VC时的代码:

- (IBAction) goto2nd
{
    SecondVC *vc = [[[SecondVC alloc] initWithNibName:@"SecondVC" bundle:nil] autorelease];
    vc.navigationItem.hidesBackButton = YES;
    [self.navigationController pushViewController:vc animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

这就应该是所有需要的,每个VC都有自己的navigationItem,它不是一个全局设置,所以你不需要打扰它来恢复后退按钮(至少在弹回设置为VC的VC时) "没有").


Jam*_*ton 6

这是我在4.3上成功使用的解决方法.

而不是隐藏后退按钮,将左侧栏按钮视图设置为空视图:

UIView *tmpView = [[UIView alloc] initWithFrame:CGRectZero];
UIBarButtonItem *tmpButtonItem = [[UIBarButtonItem alloc] initWithCustomView:tmpView];
[tmpView release];
self.navigationItem.leftBarButtonItem = tmpButtonItem;
[tmpButtonItem release];
Run Code Online (Sandbox Code Playgroud)

要恢复后退按钮,只需将左侧栏按钮项设置为nil:

[self.navigationItem setLeftBarButtonItem:nil animated:YES];
Run Code Online (Sandbox Code Playgroud)

更新:似乎4.3中的错误消失了.

注意:即使错误似乎已修复,我更喜欢"空视图"技术,因为它允许后退按钮的消失和再现动画.