我正在以下列方式更改控制器的viewDidAppear中的后退按钮项目标题:
self.navigationController.navigationBar.backItem.title = @“上一步”;
它正确地改变了它,但我有一种奇怪的行为。当我选择“上一个”按钮时,它会改变堆栈中向上的控制器(即父控制器现在的标题为“上一个”。
你现在为什么会这样?
答案 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,但它比尝试覆盖导航栏功能更好。与导航栏/导航控制器堆栈的摔跤可能会非常令人沮丧。
最好的问候。