iOS-UINavigationController、bar、baritem 区别及其关系详解
来源:互联网 发布:算法,对任意的数组排序 编辑:程序博客网 时间:2024/06/16 18:23
原文:http://www.cnblogs.com/ygm900/p/3659619.html
UINavigationController 部分
1、 UINavigationController 是一个容器类。里面盛放的是UIViewController。
容器的意思是,如果你不放入UIViewController,里面就是空的,什么也没有。
这个容器在管理UIViewController时,遵循栈管理的原则(后进先出)。
UIViewController的入栈操作:
UIViewController *aViewController = [[UIView alloc] init;[self.navigationController pushViewController:aViewController animated:NO];
出栈操作:
[self.navigationController popViewControllerAnimated:YES];
2、UINavigationController虽然是个容器,但也不是干巴巴的空壳。它由以下四部分组成:Navigation toolbar、Custom content、Navigation bar、,Navigation view。其中,我猜测,入栈的UIViewController 其界面应该就展示在Custom content区域。
参考:http://hi.baidu.com/iphone8/item/f3b3cb6f00cded2e68105b21
UINavigationItem部分
另外据悉,UINavigationController会为每一个入栈的UIViewController生成一个UINavigationItem. UIViewController通过修改UINavigationItem可以控制UINavigationBar上的按钮和标题等。如下:
你可以通过设置self.navigationItem.leftBarButtonItem为某个ButtonItem,
self.navigationItem.leftBarButtonItem
self.navigationItem.rightBarButtonItem
self.navigationItem.backBarButtonItem
self.navigationItem.titleView等等
注:1、这里的self 指的是UIViewController。
2、如果你在新视图中不修改backBarButtonItem 或leftBarButtonItem UINavigationController 会自动添加左边返回按钮用以返回了一个视图。总体的显示原则如下:
1)、Left side of the navigationBar 左按钮
a)如果当前的viewController设置了leftBarButtonItem,则显示当前VC所自带的leftBarButtonItem。
b)如果当前的viewController没有设置leftBarButtonItem,且当前VC不是rootVC的时候,则显示前一层VC的backBarButtonItem。如果前一层的VC没有显示的指定backBarButtonItem的话,系统将会根据前一层VC的title属性自动生成一个back按钮,并显示出来。
c)如果当前的viewController没有设置leftBarButtonItem,且当前VC已是rootVC的时候,左边将不显示任何东西。
此处注意:5.0中新增加了一个属性leftItemsSupplementBackButton,通过指定该属性为YES,可以让leftBarButtonItem和backBarButtonItem同时显示,其中leftBarButtonItem显示在backBarButtonItem的右边。
2)、title 标题
a)如果当前VC通过 .navigationItem.titleView指定了自定义的titleView,系统将会显示指定的titleView,此处要注意自定义titleView的高度不要超过navigationBar的高度,否则会显示出界。
b)如果当前VC没有指定titleView,系统则会根据当前VC的title或者当前VC的navigationItem.title的内容创建一个UILabel并显示,其中如果指定了navigationItem.title的话,则优先显示navigationItem.title的内容。
3)、Right side of the navigationBar 右按钮
a)如果当前VC指定了rightBarButtonItem的话,则显示指定的内容。
b)如果当前VC没有指定rightBarButtonItem的话,则不显示任何东西。
参考:http://www.cnblogs.com/smileEvday/archive/2012/05/14/2495153.html
UINavigationBar 部分
切记,UINavigationBar只有一个,它永远只属于UINavigationController,是所有UIViewController公用的。所以,当你修改了UINavigationBar的背景图片或者颜色时,相当于修改了所有UIViewController的NavigationBar的背景图片或颜色。
下面,通过如下视图,我们来了解以下,当系统展示某个具体的UIViewController时,整个页面所有元素的从属关系。
参考:http://www.cnblogs.com/iOS-dd/archive/2013/06/12/3132366.html
uinavigationController、uinavigationBar、uinavigationBarItem三者的区别,现在明白了吗?
通俗地说就是,uinavigationController是个容器,里面可以装很多uiviewController。装这么多uiviewController让用户怎么控制它们呢,总得有个工具吧。这个工具就是uinavigationBar。一个容器就这么一个bar,相当于控制台吧。但是,管理那么多uiviewController,控制台上得按钮啊、标题啊,都千篇一律是不是看起来太无聊了。为了解决这个问题,uinavigationController为每个uiviewController生成一个uinavigationBarItem,通过这个uinavigationBarItem可以改变控制台“上面”得按钮和标题。如果你不自定义uinavigationBarItem,uinavigationController会使用默认的。
- l
UINavigationController是UIViewController的子类,UINavigationBar是UIView的子类。
UINavigationBar是UINavigationController的一个组成部分,就是上面的那个导航栏。
UINavigationBar又有UINavigationItem组成。
UINavigationItem则有title,按钮,提示文本等组成,就是我们看到的title文字,右上角的按钮。
- l navigation item在navigation Bar代表一个viewController,具体一点儿来说就是每一个加到navigationController的viewController都会有一个对应的navigationItem
- l 一个导航控制器控制多个视图,NavigationBar上的leftItem,rightItem,title是由当前的视图控制器控制的
所有参考:
UINavigationController使用详解 写的不错 http://www.cnblogs.com/smileEvday/archive/2012/05/14/2495153.html
UINavigationController使用的一些技巧 讲的不错
UINavigationController,UINavigationBar 全面但 凌乱
UINavigationController 讲的比较直白
IOS开发笔记_3.UINavigationController层次关系 绝对牛b清晰
实践经验
1、self.navigationItem.leftBarButtonItem如何自定义位置:右移
方案:
UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, ITEM_WIDTH, ITEM_HEIGHT)];[btn addTarget:target action:selector forControlEvents:UIControlEventTouchUpInside];[btn setImage:[UIImage imageNamed:@"naviationbar_button_normal.png" ] forState:UIControlStateNormal];//不要用setbackgroudimage[btn setImage:[UIImage imageNamed:@"naviationbar_button_pressed.png" ] forState:UIControlStateHighlighted];btn.imageEdgeInsets = UIEdgeInsetsMake(0, -20, 0, 0); //方案UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithCustomView:btn];self.navigationItem.leftBarButtonItem = backItem;
来源:http://bbs.csdn.net/topics/390609070
2、隐藏 TabBar 的方法1(推荐)
如在A_VC中,push B_VC, 则在B_VC中写如下代码
-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; self.tabBarController.tabBar.hidden = YES; //隐藏TabBar [self.navigationItem setHidesBackButton:YES]; //隐藏NavigationController自动生成的返回按钮 self.navigationController.navigationBar.tintColor = [UIColor clearColor]; //返回按钮颜色}
隐藏 TabBar 的方法2
在A_VC中中写如下代码
-(IBAction)btnOnClicked:(id)sender{ A_VC *a_VC = [[[A_VC alloc]init]autorelease]; self.hidesBottomBarWhenPushed = YES; //用于隐藏tabBar [self.navigationController pushViewController:a_VC animated:YES]; self.hidesBottomBarWhenPushed = NO;}
- iOS-UINavigationController、bar、baritem 区别及其关系详解
- ios-UINavigationController 详解
- iOS UINavigationController 详解
- iOS UINavigationController详解与使用
- IOS开发之UINavigationController详解
- IOS开发之UINavigationController详解
- iOS开发 ☞ UINavigationController详解
- IOS开发笔记_3.UINavigationController层次关系
- UINavigationController bar 设置
- IOS学习之UINavigationController详解与使用
- iOS学习之UINavigationController详解与使用
- iOS UINavigationController控制view在navigation item下,在bottom bar上
- ios UINavigationController
- iOS UINavigationController
- iOS UINavigationController
- ios UINavigationController
- iOS UINavigationController
- IOS让标题栏背景透明、设置左右baritem
- 前端UI设计的一些个人觉得比较好的网站收藏
- Vim 使用小结(一)
- Springmvc构造RESTful详细讲解
- 动态规划系列问题-最小编辑代价
- 前段框架Bootstrap介绍和安装
- iOS-UINavigationController、bar、baritem 区别及其关系详解
- [工具.tfs]可视化的TFS命令工具——Team Foundation Sidekicks
- LevelDB源码分析4-Status
- AVRO
- WebView离线缓存开发
- 22. Generate Parentheses
- 数据库简单使用之Realm入门
- 爱品才会赢,品值APP新版登陆百度首发
- 2016/11/16北京