先来看一下 UIBarItem 的 title 的描述
1
2 |
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 中的代码片段:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 |
//file HZViewController.m<br><br>...<br>- (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 上的文字能够改变:
只需要不断的点击“Push”按钮,观察返回按钮的文字就好了。
得到的结果:
方案1:可以动态更改返回按钮的标题,并且再次返回上一级,标题如初;
方案2:可以动态更改返回按钮的标题,但是更改后,再次返回上一级,标题也被改掉了,和返回按钮上的文字一样了,这样可不行,为了保证和方案1一样的效果,恐怕需要一个变量来保持原来的title,并在必要时还原回去;
方案3:不能改变返回按钮的标题
接下来,在 viewDidLoad 方法中,去掉代码上的注释,为当前的 viewController 初始化一个 backBarButtonItem,重复上面的测试,得到的结果是:
方案1:依然可以更改返回按钮上的标题,并且返回上一级时,标题如初;
方案2:不能动态更改返回按钮的标题
方案3:依然不可以更改返回按钮的标题
#结论:
iOS: 动态更改 backBarButtonItem 的 title,布布扣,bubuko.com
iOS: 动态更改 backBarButtonItem 的 title
原文:http://www.cnblogs.com/ihojin/p/change-backbarbuttonitem-text.html