从显示的视图控制器动态更改导航栏后退按钮文本

时间:2015-02-28 21:12:26

标签: ios objective-c uinavigationbar back-button uinavigationitem

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

首先,当UINavigationItem.backBarButtonItem位于导航堆栈顶部时,视图控制器A的{​​{1}}不是左侧栏按钮,而{{1}时是左侧栏按钮}}是导航堆栈的 second-top

也就是说,您按A,然后按A,当A位于顶部时,左侧栏按钮将为B

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

B弱引用A.navigationItem.backBarButtonItemB提供一个界面来更改它的后退按钮,如下所示:

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推送B将显示可能错误的后退按钮。