iOS: 动态更改 backBarButtonItem 的 title
先来看一下 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 上的文字能够改变:
- 重新初始化一个 barBarButtonItem,并把原来的替换掉;
- 更改上一个 viewController 的 title;
- 直接修改上一个 viewController 的 backBarButton 的 title。
- 以上几种情况都是在上一个 viewController 没有初始化一个属于自己的 backBarButtonItem 的情况下进行的。
只需要不断的点击“Push”按钮,观察返回按钮的文字就好了。
得到的结果:
方案1:可以动态更改返回按钮的标题,并且再次返回上一级,标题如初;
方案2:可以动态更改返回按钮的标题,但是更改后,再次返回上一级,标题也被改掉了,和返回按钮上的文字一样了,这样可不行,为了保证和方案1一样的效果,恐怕需要一个变量来保持原来的title,并在必要时还原回去;
方案3:不能改变返回按钮的标题
接下来,在 viewDidLoad 方法中,去掉代码上的注释,为当前的 viewController 初始化一个 backBarButtonItem,重复上面的测试,得到的结果是:
方案1:依然可以更改返回按钮上的标题,并且返回上一级时,标题如初;
方案2:不能动态更改返回按钮的标题
方案3:依然不可以更改返回按钮的标题
#结论:
- 如果已经初始化好一个 viewController 的 backBarButtonItem,那么更改 viewController 的 title, 是起不到更改返回按钮文字的目的的;
- 重新赋值一个 viewController 的返回按钮,是一个动态更改返回按钮文字的不错方法。
iOS: 动态更改 backBarButtonItem 的 title的更多相关文章
- iOS中设置backBarButtonItem的title和action
一. 设置title 在需要显示该返回键的前一个Controller中设置: 1: navigationItem.backBarButtonItem = UIBarButtonItem(title: ...
- js简单显示和隐藏div,触发超链接,动态更改button值,setInterval()简单使用,jquery easyui弹出框简单使用 .
js简单显示和隐藏div .<!DOCTYPE html> .<html> .<head> .<meta charset="UTF-8"& ...
- Flutter学习(8)——CheckBox多选框使用及动态更改多选框数据
原文地址:Flutter学习(8)--CheckBox多选框使用及动态更改多选框数据 | Stars-One的杂货小窝 最近项目需求需要调整页面,记录一下实现过程 这次主要是要实现个评价页面,选择不同 ...
- delphi 动态更改屏幕分辨率(转)
一.如何动态更改屏幕分辨率 有许多小工具可以在不重新启动Windows的条件下,动态更改屏幕分辨率.你是不是也想自己动手做一个呢?请在interface段中加入下面一句 function Resolu ...
- Android应用中动态更改主题的实现
在android应用程序中我们可能需要切换模式,如晚上切换到夜间模式便于阅读等.本文参考了网上的一些资料,并结合实例,实现了动态更改主题的效果. Android中实现theme主题可以使用在activ ...
- iOS动态部署方案
转载: iOS动态部署方案 前言 这里讨论的动态部署方案,就是指通过不发版的方式,将新的内容.新的业务流程部署进已发布的App.因为苹果的审核周期比较长,而且苹果的限制比较多,业界在这里也没有特别多的 ...
- ios上 更改 状态栏(UIStatusBar)
摘要 ios上 更改状态栏(UIStatusBar)的颜色 ios UIStatusBar statusBar 状态栏 更改状态栏颜色 目录[-] IOS上 关于状态栏的相关设置(UIStatusBa ...
- WPF 动态更改启动窗体startupUri
原文:WPF 动态更改启动窗体startupUri 第一步: 在 App.xaml 里,把 StartupUri=""去掉,改成 Startup="Applicatio ...
- 微信小程序动态更改样式
获取列表长度(动态渲染),当长度>x时添加内联样式并绑定数据{{}},通过js动态更改{{}}
随机推荐
- git 常用命令以及解决问题方法
1. 创建分支: git branch test 2.切换分支: git checkout test 或切换为主分支 git checkout master 3.查看当前分支 git branch - ...
- LVS之NAT和DR服务脚本
NAT服务控制脚本 #!/bin/bash # # chkconfig: - 88 12 # description: LVS script for VS/NAT # . /etc/rc.d/init ...
- 第23章 RTX 低功耗之待机模式
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php STM32F103 待机模式介绍 本章节我们主要讲解待机模式,待机模式可实现系统的最低功耗.该模式是在 ...
- mysql处理varchar类型的between和and的时间问题少一天解决;
select * from table where CJSJ day),"%Y-%m-%d") 数据库中的时间类型是varchar,传入的类型也是string 上述sql的意思是: ...
- python.pandas read and write CSV file
#read and write csv of pandasimport pandas as pd goog =pd.read_csv(r'C:\python\demo\LiaoXueFeng\data ...
- Android VLC播放器二次开发2——CPU类型检查+界面初始化
上一篇讲了VLC整个程序的模块划分和界面主要使用的技术,今天分析一下VLC程序初始化过程,主要是初始化界面.加载解码库的操作.今天主要分析一下org.videolan.vlc.gui.MainActi ...
- u-boot2011.09 u-boot.img 的流程跟踪
一.主要是start.S 里面的 board_init_f 以及 board_init_r 函数分析,MLO与 u-boot.omg 的区别就在这里 二. MLO 加载完毕,他会重新回到 start. ...
- 对于PHP中enum的好奇
PHP中没有struct.enum这些东西,虽然万能的array用起来很爽,但写出来的代码typo问题很多.可维护性也差,需要更多的测试来辅助,而一旦加上测试的工作量是否还谈得上『爽』就是个问号了. ...
- [开发笔记]-实现winform半透明毛玻璃效果
亲测win7下可用,win8下由于系统不支持Aero效果,所以效果不是半透明的. 代码: 博客园插入不了代码了..... public partial class Form1 : Form { int ...
- dapper支持操作函数和事物
dapper除了支持基础的CURD.存储过程以外,还支持操作函数和事物. dapper操作函数的代码如下: using Dapper; using System; using System.Colle ...