更改UINavigationController backItem标题时的奇怪行为

时间:2010-06-16 16:37:36

标签: iphone uinavigationcontroller uibuttonbaritem

我正在以下列方式更改控制器的viewDidAppear中的后退按钮项目标题:

self.navigationController.navigationBar.backItem.title = @“上一步”;

它正确地改变了它,但我有一种奇怪的行为。当我选择“上一个”按钮时,它会改变堆栈中向上的控制器(即父控制器现在的标题为“上一个”。

你现在为什么会这样?

1 个答案:

答案 0 :(得分:0)

当您使用导航控制器时,请调用[self setTitle:@“Title”];在堆栈中的任何视图控制器内部将设置导航栏标题。当您按下新视图控制器时,这也是后退按钮默认使用的标题。显然,根据您的体验,显式设置backItem的标题,还将其设置为上一个视图控制器的导航栏标题,覆盖视图控制器中对-setTitle调用中指定的内容。

您可能最好只从导航堆栈中的视图控制器中管理标题。当您推送新的视图控制器时,请执行以下操作:

[self setTitle:@"Previous"];
NextViewController *controller = [[NextViewController alloc] init];
[[self navigationController] pushViewController:controller animated:YES];
[controller release], controller = nil;

现在,当下一个视图控制器显示时,后退按钮会显示“Previous”。现在,你只需要将它改回到-viewWillAppear中的真实标题:

- (void)viewWillAppear:(BOOL)animated;
{
    [self setTitle:@"Real Title"];
    [super viewWillAppear:animated];
}

它可能感觉有点hacky,但它比尝试覆盖导航栏功能更好。与导航栏/导航控制器堆栈的摔跤可能会非常令人沮丧。

最好的问候。