动态更改显示的 NavigationBar 后退按钮文本 ViewController

Dynamically change NavigationBar Back Button Text from presented ViewController

我试图在从网络接收到内容后更改 UINavigationBar 上的后退按钮文本 - 基本上是通过向后退按钮文本添加新消息计数来复制 iMessage/FB Messenger,即。 < 返回 (1) 或 < 消息 (2)

我可以更改显示的后退按钮文本 ViewController(在 viewDidLoad 中)

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] init];
barButton.title = @"Back";
self.navigationItem.backBarButtonItem = barButton;

但是当我尝试在接收新消息时调用的另一个方法中使用相同的代码时,后退按钮文本没有改变。

知道如何在显示 ViewController 后更改后退按钮文本吗?

首先,UINavigationItem.backBarButtonItem for view controller AA 位于导航堆栈顶部时,它不是左栏按钮,当 A 是导航堆栈的 second-top

也就是说,你按A,然后按B,当B在最上面时,左边的栏按钮将是A.navigationItem.backBarButtonItem

所以一个简单但不那么优雅的解决方案是:

B 提供对 A 的弱引用,并且 A 提供一个接口来更改它的后退按钮,如下所示:

@implementation A
-(void)changeBackTitle:(NSString*)title
{
    UIBarButtonItem *back = [[UIBarButtonItem alloc] initWithTitle:title style:UIBarButtonItemStyleDone target:nil action:nil];
    self.navigationItem.backBarButtonItem = back;
}
-(void)restoreBackButton
{
    self.navigationItem.backBarButtonItem = nil;
}
@end

然后BB位于堆栈顶部时调用此方法更改后退按钮标题

记得在弹出 B 时恢复后退按钮,否则下次从 A 按下 B 时可能会显示错误的后退按钮。