先来看一下 UIBarItem 的 title 的描述

The title displayed on the item.
You should set this property before adding the item to a bar. The default value is nil.

它的默认值为nil,你应该在把 item 添加到 bar 上前设置好它。

我们都知道,当我们 push 一个 viewController 后,返回 item 上的 title 正是上一个 viewController 的title;

而且当 viewController 的 title 改变时,item 的 title 也会跟着改变。

大胆猜测一下,如果 item 的 title 为 nil,那么当它的值就跟它的 viewController 的title 绑定到了一起。

#注意:虽然这个返回按钮显示在当前这个 ViewController,不过它可是属于上一个 ViewController。

做个小测验:

项目结构图:

在 ViewController 中的代码片段:

//file HZViewController.m

...
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. self.title = [NSString stringWithFormat:@"Title %i", self.navigationController.viewControllers.count]; /*
UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithTitle:[NSString stringWithFormat:@"Back#%i", self.navigationController.viewControllers.count]
style:UIBarButtonItemStylePlain
target:nil action:nil];
self.navigationItem.backBarButtonItem = backButtonItem;
*/
} - (IBAction)pushNewViewController:(id)sender { if (self.navigationController.viewControllers.count < 2) {
HZViewController *controller = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:NSStringFromClass(self.class)]; [self.navigationController pushViewController:controller animated:YES];
}else{
HZViewController *viewController = [self.navigationController.viewControllers objectAtIndex:0]; static NSUInteger count = 0;
count ++; //1
/* UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithTitle:[NSString stringWithFormat:@"Back#%i", count]
style:UIBarButtonItemStylePlain
target:nil action:nil];
viewController.navigationItem.backBarButtonItem = backButtonItem;
*/ //2
/* viewController.title = [NSString stringWithFormat:@"%i", count];*/ //3
[viewController.navigationItem.backBarButtonItem setTitle:[NSString stringWithFormat:@"%i", count]];
}
}

说明一下,pushNewViewController 方法绑定的是 push 按钮,里面有一个 if 判断,如果当前 viewController 是 navigationController 的 rootViewController, 则再 push 进一个 viewController,否则,停止 push,开始测试什么情况下,backBarButtonItem 上的文字能够改变:

  1. 重新初始化一个 barBarButtonItem,并把原来的替换掉;
  2. 更改上一个 viewController 的 title;
  3. 直接修改上一个 viewController 的 backBarButton 的 title。
  4. 以上几种情况都是在上一个 viewController 没有初始化一个属于自己的 backBarButtonItem 的情况下进行的。

只需要不断的点击“Push”按钮,观察返回按钮的文字就好了。

得到的结果:

方案1:可以动态更改返回按钮的标题,并且再次返回上一级,标题如初;

方案2:可以动态更改返回按钮的标题,但是更改后,再次返回上一级,标题也被改掉了,和返回按钮上的文字一样了,这样可不行,为了保证和方案1一样的效果,恐怕需要一个变量来保持原来的title,并在必要时还原回去;

方案3:不能改变返回按钮的标题

接下来,在 viewDidLoad 方法中,去掉代码上的注释,为当前的 viewController 初始化一个 backBarButtonItem,重复上面的测试,得到的结果是:

方案1:依然可以更改返回按钮上的标题,并且返回上一级时,标题如初;

方案2:不能动态更改返回按钮的标题

方案3:依然不可以更改返回按钮的标题

#结论:

  1. 如果已经初始化好一个 viewController 的 backBarButtonItem,那么更改 viewController 的 title, 是起不到更改返回按钮文字的目的的;
  2. 重新赋值一个 viewController 的返回按钮,是一个动态更改返回按钮文字的不错方法。

iOS: 动态更改 backBarButtonItem 的 title的更多相关文章

  1. iOS中设置backBarButtonItem的title和action

    一. 设置title 在需要显示该返回键的前一个Controller中设置: 1: navigationItem.backBarButtonItem = UIBarButtonItem(title: ...

  2. js简单显示和隐藏div,触发超链接,动态更改button值,setInterval()简单使用,jquery easyui弹出框简单使用 .

    js简单显示和隐藏div .<!DOCTYPE html> .<html> .<head> .<meta charset="UTF-8"& ...

  3. Flutter学习(8)——CheckBox多选框使用及动态更改多选框数据

    原文地址:Flutter学习(8)--CheckBox多选框使用及动态更改多选框数据 | Stars-One的杂货小窝 最近项目需求需要调整页面,记录一下实现过程 这次主要是要实现个评价页面,选择不同 ...

  4. delphi 动态更改屏幕分辨率(转)

    一.如何动态更改屏幕分辨率 有许多小工具可以在不重新启动Windows的条件下,动态更改屏幕分辨率.你是不是也想自己动手做一个呢?请在interface段中加入下面一句 function Resolu ...

  5. Android应用中动态更改主题的实现

    在android应用程序中我们可能需要切换模式,如晚上切换到夜间模式便于阅读等.本文参考了网上的一些资料,并结合实例,实现了动态更改主题的效果. Android中实现theme主题可以使用在activ ...

  6. iOS动态部署方案

    转载: iOS动态部署方案 前言 这里讨论的动态部署方案,就是指通过不发版的方式,将新的内容.新的业务流程部署进已发布的App.因为苹果的审核周期比较长,而且苹果的限制比较多,业界在这里也没有特别多的 ...

  7. ios上 更改 状态栏(UIStatusBar)

    摘要 ios上 更改状态栏(UIStatusBar)的颜色 ios UIStatusBar statusBar 状态栏 更改状态栏颜色 目录[-] IOS上 关于状态栏的相关设置(UIStatusBa ...

  8. WPF 动态更改启动窗体startupUri

    原文:WPF 动态更改启动窗体startupUri 第一步: 在 App.xaml 里,把 StartupUri=""去掉,改成  Startup="Applicatio ...

  9. 微信小程序动态更改样式

    获取列表长度(动态渲染),当长度>x时添加内联样式并绑定数据{{}},通过js动态更改{{}}

随机推荐

  1. FireFox在新标签中打开搜索结果

    原文:https://jingyan.baidu.com/article/20b68a88563a1b796cec6228.html 步骤如下: (1)在浏览器的地址栏输入:about:config, ...

  2. 玩转shell命令行

    移动光标快捷键 ctrl+f 向前移动一个字符 ctrl+b 向后移动一个字符 ctrl+a 移动到当前行首home ctrl+e 移动到当前行尾end alt+f 向前移动一个单词 alt+b 向后 ...

  3. How To Set Up SSH Keys

    How To Set Up SSH Keys.https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2

  4. Web基础 HTML CSS JS JQuery AJAX

    1. Web基础 网页的骨骼HTML 什么是HTML超文本标记语言:Hyper Text Markup Language 这都不重要,重要的是:HTML是Web网页的基本组成部分HTML中定义的元素, ...

  5. 地铁盾构管片姿态测量软件(Excel)

    记得11年刚开始从事盾构测量的时候,只知道搬站(倒站),测导线,还有就是测量管片.觉得最麻烦的就是在每个管片上面放个水平长尺,用全站仪测出他的水平位置和高程,但当时是本子记录每个数据,回去在敲到电脑上 ...

  6. 【WPF】添加自定义字体

    需求:在WPF项目中使用幼圆字体. 步骤: 1.首先要有幼圆TTF字体文件.在C:\Windows\Fonts目录下找,如果系统字体库中没有,就上网下一份,如这里或这里. 2.将字体文件复制到WPF项 ...

  7. 微信小程序学习资料

    官方文档 https://mp.weixin.qq.com/debug/wxadoc/dev/ W3CSchool的教程 https://www.w3cschool.cn/weixinapp/ 更多参 ...

  8. InstallShield Build错误:Internal build error 6041

    点击左侧菜单: Media-Release-选择release版本(例如Release1)-Build标签-   keey unused directories 改为no(默认为yes)

  9. 【转】26张PPT让你告别拖延症

    不论你如何富有,你都赚不到更多的时间,你也回不到过去.没有那么多的假如,只有指针滴答的时光飞逝和你应该好好把握的现在. 可能的话,请仔细读读PPT原件而不要只是看翻译吧. 1.时间常有,时间优先. 2 ...

  10. angula学习

    入门 http://www.angularjs.cn/A004 http://www.cnblogs.com/whitewolf/p/angularjs-start.html http://www.n ...