Ios 从显示的ViewController动态更改导航栏后退按钮文本

Ios 从显示的ViewController动态更改导航栏后退按钮文本,ios,objective-c,uinavigationbar,back-button,uinavigationitem,Ios,Objective C,Uinavigationbar,Back Button,Uinavigationitem,我试图在从网络接收到信息时更改UINavigationBar上的后退按钮文本-基本上是通过向后退按钮文本添加新的消息计数来复制iMessage/FB Messenger,即

我试图在从网络接收到信息时更改UINavigationBar上的后退按钮文本-基本上是通过向后退按钮文本添加新的消息计数来复制iMessage/FB Messenger,即 我可以从显示的ViewController(在viewDidLoad中)更改后退按钮文本

但是,当我尝试在另一个方法中使用相同的代码,该方法在收到新消息时被调用,返回按钮文本不会改变


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

首先,
UINavigationItem。视图控制器
A
的backBarButtonItem
A
位于导航堆栈顶部时不是左栏按钮,在
A
位于导航堆栈第二顶部时是左栏按钮

也就是说,您先按
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
然后当
B
位于堆栈顶部时,调用此方法更改后退按钮标题

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

@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