navigationItem.backBarButtonItem不工作?为什么上一个菜单仍显示为按钮?

skå*_*fan 25 iphone cocoa-touch objective-c uinavigationcontroller ios4

尝试在向下钻取导航控制器中自定义我的后退按钮.

在我的一个视图控制器上,我有一个添加按钮,其中代码以编程方式生成一个新的UIViewController:

- (void)add:(id)sender 
{
    MyAddViewController *addController = [[MyAddViewController alloc] initWithNibName:@"MyAddViewController" bundle:nil];

    [self.navigationController pushViewController:addController animated:YES];

    [addController release];
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,当我单击添加按钮时,它会向下钻取到新视图中.在我的viewDidLoad方法里面MyAddViewController.m:

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];
Run Code Online (Sandbox Code Playgroud)

但这不起作用.导航控制器中的后退按钮仍然是堆栈上前一个视图控制器的标题.看来这条线什么也没做.我错过了什么?

谢谢

ben*_*ong 50

self.navigationItem.backBarButtonItem用于视图控制器推送的视图上显示的后退按钮.因此,您需要将该行移动到上一个视图控制器.

  • 经过几个小时的挫折,这个答案救了我. (3认同)
  • 据我所知,你不能使用 backBarButtonItem 来做到这一点。为此,您需要替换 leftBarButtonItem 并为其分配一个操作。 (2认同)

Wri*_*sCS 28

这只适用于viewController之后的每个子节点self.navigationItem.backBarButtonItem.


Mat*_*ing 12

你混淆了这个backBarButtonItemleftBarButtonItem.从UINavigationItem文档backBarButtonItem:

当此项目是导航栏的后退项目时 - 当它是顶部项目下方的下一个项目时 - 它可以表示为导航栏上的后退按钮.使用此属性指定后退按钮.您设置的后栏按钮项目的目标和操作应为零.默认值是显示导航项标题的条形按钮项.

所以,如果你要改变:

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];
Run Code Online (Sandbox Code Playgroud)

至:

self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];
Run Code Online (Sandbox Code Playgroud)

我相信你会得到预期的效果.

  • ... ...除了不是"正确的后退按钮",也就是说,它将缺少箭头形状. (17认同)

Gre*_*ung 5

你无法替换backBarButtonItem,但你可以用它leftBarButtonItem来覆盖它.但要使新按钮的执行操作与后退按钮相同,您需要设置新按钮的目标和操作,如:

- (void)dismissMyView {
    [self.navigationController popViewControllerAnimated:YES];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]
        initWithTitle:@"Quit" style: UIBarButtonItemStyleBordered
        target:self action:@selector(dismissMyView)];
}
Run Code Online (Sandbox Code Playgroud)

  • 除了它看起来不像后退按钮(箭头形按钮) (8认同)