一. UINavigationController
UINavigationCOntroller导航控制器,是iOS中最常用的多视图控制器之一,用它来管理多个视图控制器. 导航控制器可以称为是,管理视图控制器的控制器,主要管理有层次递进关系的控制器.
UINavigationController继承于UIViewController,以栈的方式管理所有控制的视图控制器,至少要有一个被管理的视图控制器,这个控制器我们称作,导航控制器的根视图控制器.
任何继承自UIViewController的类(多态)都可以座位根控制器.
导航控制器的创建方法:
RootViewController *rootVC = [[RootViewController alloc] init];
UINavigationController *NC = [[UINavigationController alloc] initWithRootViewController:rootVC];
self.window.rootViewController = NC;
制定的页面中,在上方都是出现一层导航栏的.
二. UINavigationBar
因为导航栏是唯一的,所以对导航栏自身的设置会影响到每一个页面,
导航栏的半透明效果会影响self.view子视图的坐标系.
translucent属性为BOOL值,是否打开或者关闭半透明效果.
半透明效果打开,子视图的坐标系原点是屏幕的左上角.
半透明效果关闭,子视图的坐标原点是导航栏的左下角,状态栏高度是20,导航栏的高度是44
修改导航栏的背景颜色 barTintColor
修改导航栏的背景图片 setBackgroundImage:forBarMetrics:
隐藏导航栏 hidden 为BOOL类型,默认为YES
对NavigationItem 视图控制器进行修改,之影响当前页面,每一个页面都有自己的navigationItem
设置标题,title
自定义titleView中间的view titleView
设置导航栏上视图被渲染的颜色
tintColor
导航栏的颜色
barTintColor
导航栏背景的颜色
backgroundColor (会被分层盖住)
三. 页面跳转
UINavigationCOntroller通过栈的方式管理控制器的切换,控制入栈和出栈来展示各个视图控制器.UINavigationController的ContentView里始终显示栈顶控制器的view.viewControllers属性是一个可变数组(NSMutableArray)存储了栈中的所有被管理的控制器,入栈的时候,使用addObject把新的视图控制器对象添加到数组末尾,出栈时removeLastObject移除数组末尾的视图控制器对象.navigationController属性,父类中的属性,每个在栈中的控制器,都能通过此属性获得自己所在的UINavigationController对象.
pushViewController:animated:进入下一个视图控制器
popViewControllerAnimated:返回上一个视图控制器
popToVIewController:animated:返回指定的视图控制器
viewControllers[0]为一个数组
popToRootViewControllerAnimated: 返回根视图控制器
四. 模态(modal)
模态跳转至下一页:
1. 创建第二页对象
SecondViewController *secVC = [[SecondViewController alloc] init];
2. 设置过渡动画(有默认值,可以不设置)
secVC.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
3. 模态控制器 a. 第二页对象 b. 是否使用动画 c. 模态完成后执行的block
[self presentViewController:secVC animated;YES completion:^{}];
返回上一页 参数1是否需要动画 参数2返回后执行的block
模态跳转至上一页:
[self dismissViewControllerAnimated:YES completion:^{}];
页面切换方式的对比:
页面的切换方式主要分为:推出(push)和模态(present)
推出(push)用于一系列的视图之间的跳转,有层次递进关系
模态(present)用于单独功能页面的跳转和主要业务逻辑没有关联(登录,歌曲播放页,系统相册,应用中调用系统功能)