导航控制器 UINavigationController
是一个容器视图控制器,用于切换具有层次关系的视图,而非同一级视图间的切换。
UINavigationController 继承自UIViewController ,是系统封装的容器视图控制器。
使用栈的形式存放导航控制器的所有子视图控制器,先进后出。
——————————————————————————————
导航控制器如何管理视图控制器
a. 导航控制器以一个视图控制器(UIViewController)为参数初始化创建自己的对象
[UINavigationController alloc] initWithRootViewController:]
b. 向导航控制器压入一个视图控制器
[self.navigationController pushViewController:animated:]
c. 从导航控制器弹出最顶层的视图控制器
[self.navigationController popViewControllerAnimated:]
d. 从导航控制器弹出一直到显示指定的视图控制器
[self.navigationController popToViewController:animated:]
f. 从导航控制器弹出一直到显示根视图控制器
[self.navigationController popToRootViewControllerAnimated:]
附加:各子视图需设置背景色,透明的情况下,会出现卡顿
——————————————————————————————
导航条 UINavigationBar
导航条高度为44.
a. 获取导航条
self.navigationController.navigationBar
b. 设置导航条是否为半透明
bar.translucent = YES/NO;
/* 设置为YES, 子视图控制器内,视图控件的坐标位置从屏幕左上角开始计算,也就是说可能会被导航条覆盖;设置为NO, 视图控件的坐标位置从导航条下方左上角开始计算。 */
c. 设置导航条的背景色
bar.barTintColor
/* 在iOS7 之前(不包括7),使用bar.tintColor 设置背景色 ,目前 tintColor 用于导航条上按钮的文字颜色 */
d. 设置导航条的背景图片
[bar setBackgroundImage:forBarMetrics:]
/* 图片尺寸高度若超过44,则向上扩展覆盖状态栏,
forBarMetrics:UIBarMetrics 视图横竖模式。 */
f. 设置导航条的风格,会影响状态栏的黑白显示
bar.barStyle
g. 隐藏/显示导航栏
[self.navigationController setNavigationBarHidden:animated:]
——————————————————————————————
导航项 UINavigationItem
UINavigationItem是UINavigationController子视图的导航项
viewController.navigationItem
导航项分为三部分:
a. 标题区域
navigationItem.title / navigationItem.titleView
viewController.title?---建议不用---
b. 左侧区域
navigationItem.leftBarButtonItem // 单个条目
navigationItem.leftBarButtonItems // 多个条目
c. 右侧区域
navigationItem.rightBarButtonItem
navigationItem.rightBarButtonItems
——————————————————————————————
导航控制器的工具条 UIToolBar
工具条高度 44
a. 获取工具条
self.navigationController.toolBar
b. 显示工具条
[self.navigationController setToolbarHidden:animated:]
c. 设置工具条背景色
toolBar.barTintColor
d. 设置工具条背景图片
[toolBar setBackgroundImage:forToolbarPosition:barMetrics:]
f. 在工具条上添加条目
viewController.toolBarItems
g. 设置条目上的文字颜色
toolBar.tintColor
——————————————————————————————
1. UITabBarController
分栏控制器,是一个容器视图控制器,用于切换并行关系的视图,而非有层次关系的视图间的切换。
作为容器视图控制器的一种,其使用方式与之前的自定义容器视图控制器, UINavigationController是类似的。
在视图层次上,位于window的上一层。
继承关系上,与UINavigationController一样,继承自UIViewController.
注意与UINavigationController在对子视图控制器管理的比较,见同目录pdf。
2. UITabBarController 初始化及子视图管理
> 初始化
[UITabBarController alloc] init]
> 定制UITabBar,高度49
设置TabBar 的背景色,背景图片,前景色(类似NavigationBar)
> 设置其子视图控制器
每个子视图控制器对应一个UITabBarItem
对于UITabBarItem初始化分以系统类型和自定义类型的方式。前者系统给定了图片和文字,后者可任意指定图片和文字。
> 获取或设置UITabBarController选中的TabBarItem
tabBarController.selectedIndex
> UITabBarController 协议<UITabBarControllerDelegate>
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
/* 扩展: tabBarItem右上角的带数字的红色圈实现:tabBarItem.badgeValue */
3. UITabBarController+UINavigationController 结合实现app的一种框架
> 每个tabBarItem对应一个NavigationController
> 每组导航条相同背景,实现所有子视图控制器的父类
> 每组导航下的子视图控制器中,第二个子视图控制器不显示tabBar
viewController.hidesBottomBarWhenPushed
实现微信框架。
4. UITabBarController 可视化