UINavigationController(二)
在使用UINavigtionController的时候,常常会弄不清哪些属性是UINavigationController的,哪些属性是UIViewController的。并且在更改导航栏和工具栏的样式的时候,常常会于遇到api使用下去没有效果的情况。总之,一直用得比較混乱,今天要好好做一个总结,把那些常常使用的功能都搞清楚。
一、怎样往导航栏和工具栏加入button
1、navigationItem属性
这个属性是UIViewController在UINavigationControllerItem类目下的。
@property(nonatomic,readonly,retain)UINavigationItem *navigationItem;
文档的解释:在必要的时候会创建该属性对象。以便于控制器能够定制它自己的导航栏外观。
UINavigationItem有下面属性:
@property(nonatomic,retain)UIBarButtonItem *leftBarButtonItem;//导航栏左边的button,位置与“返回”button同样
@property(nonatomic,retain)UIBarButtonItem *rightBarButtonItem;//导航栏右边的button
@property(nonatomic,retain)UIBarButtonItem *backBarButtonItem; //假设前面的那个控制器有title内容,则back button的内容为<title,假设没有title。默认显示<back
@property(nonatomic,retain)UIView *titleView;//自己定义title的样式
@property(nonatomic,copy)NSArray *leftBarButtonItems NS_AVAILABLE_IOS(5_0);//使用该属性,能在导航栏左边显示多个button
@property(nonatomic,copy)NSArray *rightBarButtonItems NS_AVAILABLE_IOS(5_0);//类似leftBarButtonItems属性
@property(nonatomic,copy)NSString *title;//给它赋值的效果相当于给控制器的title属性赋值一样
@property(nonatomic,copy)NSString *prompt; //文字内容会显示在title的上面。这个属性会使得导航栏的高度添加30
@property(nonatomic) BOOL leftItemsSupplementBackButton NS_AVAILABLE_IOS(5_0);//默认值为NO。在leftbutton和backbutton同一时候存在的情况下,仅仅显示leftbutton;假设设为YES,将会显示backbutton和leftbutton,backbutton显示在leftbutton前面
@property(nonatomic,assign)BOOL hidesBackButton;
2、toolbarItems属性
这个属性是UIViewController在UINavigationControllerContextualToolbarItems类目下的。
@property (nonatomic,retain)NSArray
*toolbarItemsNS_AVAILABLE_IOS(3_0);
功能:在UIViewController中创建一系列UIBarButtonItem对象。将这些对象加入到toolbarItems数组中,这些UIBarButtonItembutton就会显示在控制器底部的工具栏中。
代码例如以下:
UIBarButtonItem *refreshItem = [[UIBarButtonItem alloc]initWithCustomView:refreshButton];
//每一个控制器有自己的toolbaritems属性,管理工具栏的数组
[self setToolbarItems:[NSArray arrayWithObjects:refreshItem, nil]];
二、怎样定制导航栏和工具栏的样式
1、导航栏的样式:
navigationBar是UINavigationController的属性
[self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor redColor],NSFontAttributeName:[UIFont boldSystemFontOfSize:20]}];
NSForegroundColorAttributeName是keyword。表示文字的颜色
NSFontAttributeName表示字体大小和样式。
//这里的两个keyword是ios7開始才有的,ios7之前有另外的相应keyword
- (void)setBackgroundImage:(UIImage
*)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics用于设置导航栏背景图片
(4)导航栏的显示与隐藏
仅仅有UINavigationController的navigationBarHidden属性才干控制导航栏的显示和隐藏。
2、工具栏的样式:
toolbar是UINavigationController的属性
(1)工具栏的button
与navigationbar一样的情况。从ios7開始。tintcolor属性设置button的字体颜色
(2)工具栏的背景色
bartintcolor设置工具栏的背景颜色
(3)工具栏的背景图片
- (void)setBackgroundImage:(UIImage *)backgroundImage forToolbarPosition:(UIBarPosition)topOrBottom barMetrics:(UIBarMetrics)barMetrics
(4)工具栏的显示和隐藏
仅仅有UINavigationController的toolbarHidden属性才干控制导航栏的显示和隐藏。
三、NavigationBar的显示困惑
1、leftbutton和backbutton
(1)假设当前控制器设置了leftbutton。优先显示leftbutton
(2)假设当前控制器没有设置leftbutton,且当前控制器不是导航控制器的根。则显示前面那个控制器的backbutton。假设前面那个控制器没有指定backbutton。则系统会依据前一层的控制器的title属性生成一个backbutton。假设前一层控制器的title为“pre”,则backbutton显示为“<pre”,否则显示为“<back”.
能够说。当前控制器的backbutton是为后面的那个控制器准备的。
(3)假设当前控制器没有leftbutton,且当前控制器是导航控制器的根。则导航栏左边没有不论什么显示。
2、控制器的title和navigationItem的title、titleView
(1)假设navigationItem的titleview属性有指定,优先显示titileview的样式
(2)假设titleview没有指定,优先显示navigationItem的title的文字
(3)假设navigationItem的title没有指定,就以控制器的title属性来显示。
四、导航控制器的栈
1、UINavigationController的viewControllers属性NSArray类型,存放当前在导航控制器栈内的全部视图控制器。
2、topViewController属性指的是导航控制器栈顶的视图控制器。
3、visibleViewController属性,假设栈顶的控制器还显示了一个模态视图控制器。则指向该模态视图控制器,否则就是栈顶的那个视图控制器。
UINavigationController(二)的更多相关文章
- iOS基础 - 控制器管理
一.Container 一个iOS的app很少只由一个ViewController组成,除非这个app极其简单.当app中有多个ViewController的时候,我们就需要对这些ViewContro ...
- UINavigationController详解二(转)页面切换和SegmentedController
原文出自:http://blog.csdn.net/totogo2010/article/details/7682433,非常感谢. 1.RootView 跳到SecondView 首先我们需要新一个 ...
- [转]iOS学习之UINavigationController详解与使用(二)页面切换和segmentedController
转载地址:http://blog.csdn.net/totogo2010/article/details/7682433 iOS学习之UINavigationController详解与使用(一)添加U ...
- iOS学习之UINavigationController详解与使用(二)页面切换和segmentedController
iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem是上篇,我们接着讲UINavigationController的重要作用,页面的管理和切换. ...
- UINavigationController具体解释(二)
@UINavigationBar-----(是一个View)基本介绍 1.导航栏,和导航控制器一样,是一个容器用来显示提供的其它对象的内容 2.导航栏显示的内容,通过设置UINavigationIte ...
- UINavigationController + UIScrollView组合,视图尺寸的设置探秘(二)
承接上文,我想把view布局修改为如下模式,让ScrollView长在NavigationBar的下方,这总不会有遮挡的问题了吧: story board内容如下,主要是右侧视图蓝色区域添加了Scro ...
- UINavigationController
知识点: 1)UINavigationController 2)UINavigationBar 3)UINavigationItem 4)UIToolBar ===================== ...
- iOS项目开发中的知识点与问题收集整理②(Part 二)
1.点击UIButton 无法产生触摸事件 如果在UIImageView中添加了一个按钮,你会发现在默认情况下这个按钮是无法被点击的,需要设置UIImageView的userInteractio ...
- IOS 学习 开发 自定义 UINavigationController 导航
文件目录如下:基本导航顺序: root -> First -> Second -> Third.其中,FirstViewController作为 navigation堆栈的rootv ...
随机推荐
- 洛谷 P1068 分数线划定【结构体排序】
题目描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,A 市对 所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试.面试分数线根 据计划录取人数的150%划 ...
- 学习LSM(Linux security module)之二:编写并运行一个简单的demo
各种折腾,经过了一个蛋疼的周末,终于在Ubuntu14.04上运行了一个基于LSM的简单demo程序. 一:程序编写 先简单的看一下这个demo: //demo_lsm.c#include <l ...
- [Luogu P4198]楼房重建(线段树)
题目描述 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些事件发生在一个 ...
- BZOJ 3524 [Poi2014]Couriers(可持久化线段树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3524 [题目大意] 给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个 ...
- 【动态规划】【二分】【最长不下降子序列】洛谷 P1020 导弹拦截
最长不下降子序列的nlogn算法 见 http://www.cnblogs.com/mengxm-lincf/archive/2011/07/12/2104745.html 这题是最长不上升子序列,倒 ...
- 误删除Ubuntu 14桌面文件夹“~/桌面”,如何恢复?
一不小心把当前用户的桌面文件夹“/home/wenjianbao/桌面”删了,导致系统把“/home/wenjianbao”当成桌面文件夹.结果,桌面上全是乱七八糟的文件/文件夹. 查看了下网络资料, ...
- 我的vim配置---jeffy-vim-v2.2.tar
http://files.cnblogs.com/pengdonglin137/jeffy-vim-v2.2.rar 修改了配色. 使用方法: 在Linux下,解压后,进入解压后的目录,执行./ins ...
- TDiocpCoderTcpServer返回数据记录有条数限制的问题
TDiocpCoderTcpServer返回数据记录有条数限制的问题 在使用TDiocpCoderTcpServer控件返回查询数据的时候,发现当记录条数超过一定数量的时候(比方有人反试图返回30万条 ...
- SeaJS入门
Sea.js是一种模块加载工具 官网:http://seajs.org/docs/ 使用步骤: 1.下载sea.js 2.引入sea.js 3.加入配置代码 // seajs 的简单配置 seajs. ...
- fullPage全屏滚动的实现
fullPage.js 是一个基于 jQuery 的插件,它能够很方便.很轻松的制作出全屏网站. 用法: 1.引入jquery 2.引入fullPage 3.每个section代表一屏 4.js启动: ...