我正在通过以下方式更改控制器的 viewDidAppear 中的后退按钮项目标题:
self.navigationController.navigationBar.backItem.title = @"Previous";
它正确地改变了标题,但我的行为很奇怪。当我选择“上一个”按钮时,它会更改堆栈中的控制器的标题(即父控制器现在具有“上一个”的标题。
你现在知道为什么会这样吗?
我正在通过以下方式更改控制器的 viewDidAppear 中的后退按钮项目标题:
self.navigationController.navigationBar.backItem.title = @"Previous";
它正确地改变了标题,但我的行为很奇怪。当我选择“上一个”按钮时,它会更改堆栈中的控制器的标题(即父控制器现在具有“上一个”的标题。
你现在知道为什么会这样吗?
当您使用导航控制器时,调用 [self setTitle:@"Title"]; 在堆栈中的任何视图控制器内部都将设置导航栏标题。当您推送新的视图控制器时,这也是后退按钮默认使用的标题。显然,根据您的体验,明确设置 backItem 的标题,还将其设置为前一个视图控制器的导航栏标题,覆盖视图控制器中对 -setTitle 的调用中指定的任何内容。
您最好只从导航堆栈中的视图控制器中管理标题。当你去推送一个新的视图控制器时,这样做:
[self setTitle:@"Previous"];
NextViewController *controller = [[NextViewController alloc] init];
[[self navigationController] pushViewController:controller animated:YES];
[controller release], controller = nil;
现在,当显示下一个视图控制器时,后退按钮会显示“上一个”。现在,您只需将其更改回其真实标题应位于 -viewWillAppear 中的任何内容:
- (void)viewWillAppear:(BOOL)animated;
{
[self setTitle:@"Real Title"];
[super viewWillAppear:animated];
}
它可能会让人觉得有点 hacky,但它比尝试覆盖导航栏功能要好。与导航栏/导航控制器堆栈搏斗可能会非常令人沮丧。
最好的祝福。