简体   繁体   English

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

[英]Dynamically change NavigationBar Back Button Text from presented ViewController

I'm trying to change the back button text on a UINavigationBar upon receiving something from the network - basically replicating iMessage/FB Messenger by adding a new message count to the back button text ie. 我试图在从网络接收到某些信息后更改UINavigationBar上的后退按钮文本-基本上是通过向后退按钮文本即添加新消息计数来复制iMessage / FB Messenger。 < Back (1) or < Messages (2) <返回(1)或<消息(2)

I can change the back button text from the presented ViewController (in viewDidLoad) 我可以从显示的ViewController中更改后退按钮文本(在viewDidLoad中)

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

But when I try to use that same code in another method that is called upon receiving a new message, the back button text doesn't change. 但是,当我尝试在收到新消息时调用的另一种方法中使用相同的代码时,后退按钮文本不会更改。

Any idea how I can change the back button text from the ViewController after it is presented ? 任何想法提出后,我如何能够改变来自ViewController中后退按钮的文字?

First of all, UINavigationItem.backBarButtonItem for view controller A is not the left bar button when A is on top of the navigation stack, it is the left bar button when A is second-top of the navigation stack. 首先, UINavigationItem.backBarButtonItem用于视图控制器A不是当左栏按钮A是对导航堆栈的顶部,它是左栏按钮时A是导航堆栈的第二顶部

That is to say, you push A , and then push B , when B is on top, the left bar button will be A.navigationItem.backBarButtonItem 也就是说, A.navigationItem.backBarButtonItem A再按B ,当B在顶部时,左栏按钮将为A.navigationItem.backBarButtonItem

So a easy but not so elegant solution would be: 因此,一个简单但不太优雅的解决方案是:

Give B a weak reference to A , and A provide a interface to change it's back button like this: B弱引用AA提供一个接口来更改它的后退按钮,如下所示:

@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

Then B call this method to change the back button title when B is on top of the stack 然后,当B位于堆栈顶部时, B调用此方法以更改后退按钮标题

Remember to restore the back Button when B is popped, otherwise next time push B from A will show a maybe wrong back button. 切记,当弹出B时,请恢复后退按钮,否则下次从A按下B ,可能会显示出错误的后退按钮。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 从以模态呈现的 ViewController 更改按钮的文本 - Change the text of the button from ViewController which presented modally 从其他ViewController更改NavigationBar文本 - Change NavigationBar Text from Different ViewController NavigationBar后退按钮在popViewController之后更改文本 - NavigationBar back button change text after popViewController 从 SwiftUI 中的导航栏中删除后退按钮文本 - Remove back button text from navigationbar in SwiftUI 以编程方式显示ViewController时无法加载NavigationBar - NavigationBar not loading when ViewController is programatically presented 从UIActivityViewController中选择时,MessageComposer的NavigationBar和BarButtonItem颜色更改 - NavigationBar & BarButtonItem color change for MessageComposer presented on choosing from UIActivityViewController 导航控制器的“后退按钮”文本:以模态显示 - Navigation Controller “back button” text: Presented Modally 模态中的searchController searchBar文本颜色变化呈现ViewController - searchController searchBar text color change in modal presented ViewController 如何从呈现的视图控制器上的按钮操作中推动ViewController - How to push viewcontroller from button action on the presented view controller 导航栏中的更新后退按钮 - Update back button in navigationbar
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM