【问题标题】:Dynamically change NavigationBar Back Button Text from presented ViewController从呈现的视图控制器动态更改导航栏后退按钮文本
【发布时间】:2015-02-28 21:12:25
【问题描述】:

我正在尝试在从网络接收到某些内容时更改 UINavigationBar 上的后退按钮文本 - 基本上是通过向后退按钮文本添加新消息计数来复制 iMessage/FB Messenger,即。

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    首先,视图控制器AUINavigationItem.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调用该方法改变返回按钮标题

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多