正确理解Navgation的BackItem

来源:互联网 发布:js怎么遍历jsonobject 编辑:程序博客网 时间:2024/05/19 02:29

假如从A视图控制器进入B视图控制器(self指的是AController,BController指的B)


UINavigationController Class Reference发现使用pushViewController切换到下一个视图时,navigation controller按照以下3条顺序更改导航栏的左侧按钮。
1、如果B视图有一个自定义的左侧按钮(leftBarButtonItem),则会显示这个自定义按钮,矩形非尖角的;
2、如果B没有自定义按钮,但是A视图的backBarButtonItem属性有自定义项,则显示这个自定义项,样式是尖角的
3、如果前2条都没有,则默认显示一个后退按钮,后退按钮的标题是A视图的标题。
这个按钮的样式是尖角的。

按照这个解释,如果要达到修改backItem的目的,则修改的代码应该放在A视图的pushViewController语句之前。

UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStyleBordered target:nil action:nil];[self.navigationItem setBackBarButtonItem:backItem];//修改的是A的navigationItem[backItem release];[self.navigationController pushViewController:BController animated:YES];//一定要在push之前修改哦。

还有一个问题也在这里说出来探讨一下吧. 大家有没有留意过一个现象,就是我们使用或者修改navgationbar的时候,是self.navigationController.navigationBar,而修改item的时候使用的是self.navigationItem。

这个现象说明一个什么问题呢?

就是,navgationcontroller在一个层次视图管理结构中是唯一的,它负责管理了视图的栈。也就是说,所有使用self.navigationController的属性,比如self.navigationController.navigationBar,这种修改或者使用对于整个视图栈都是具有全局性的,再具体一点到一个控件上,就是说navigationbar是唯一的。 相似的理解,那么使用self.navigationItem的地方就意味着修改的是self的一个属性,也就意味着navigationItem只是当前视图的一个属性而已。那么,也就意味着每一个视图都有着自己独立的navigationItem。通过在xcode4.4,打印日志验证,也确实如此。只是不知道是否所有版本是统一的。

日志如下:

 main:<UINavigationItem: 0x6b912b0>
 main:<UINavigationController: 0x6b82630>
 main:<UINavigationBar: 0x6b90620; frame = (0 20; 320 44); autoresize = W; layer = <CALayer: 0x6b90710>>
 second:<UINavigationItem: 0xde6f470>
 second:<UINavigationController: 0x6b82630>
 second:<UINavigationBar: 0x6b90620; frame = (0 20; 320 44); autoresize = W; layer = <CALayer: 0x6b90710>>

点击返回之后再次跳转到second,又会随着新的controller的生成而生成新的navigationItem。
 second:<UINavigationItem: 0x6b92dd0>
 second:<UINavigationController: 0x6b82630>
 second:<UINavigationBar: 0x6b90620; frame = (0 20; 320 44); autoresize = W; layer = <CALayer: 0x6b90710>>


navigationitem是继承自NSObect,充当的是一个容器的作用,可以用来在navgationbar显示标题,左右按钮等等。

剩下的还有一些关于buttonItem的推理,留给大家自己去思考吧。留点空间给大家。吼吼~~

原创粉丝点击