(1)建立web
建立导航控制器而且为导航控制器添加根视图控制器数组
FirstViewController *firstVC = [[FirstViewController alloc]init]; UINavigationController *navC = [[UINavigationController alloc]initWithRootViewController:firstVC];(2)工做原理spa
UINavigationController经过栈的方式管理控制器的切换,控制入栈和出栈来展现各个视图控制器,UINavigationControl的ContentView里面显示的是处于栈顶控制器的view代理
(3)经常使用属性code
viewControllers 该属性存储了栈中的全部被管理的控制器navigationController 父类中的属性,每一个在栈中的控制器,都能经过该属性获取本身所在的UINavigationController对象topViewController 获取位于栈顶的控制器visibleviewController 当前正在显示的控制器 navigationBar 获取导航条对象
(4)入栈与出栈继承
进入下一个视图控制器图片
pushViewController:animated返回上一个视图控制器it
popViewControllerAnimated:返回到指定的视图控制器io
popToViewController:animated返回至根视图控制器
popToRootViewControllerAnimated(5)添加子控制器 第一种方法:上面初始化建立的方式
第二种方法:将须要NaviigationController管理的视图添加进到NavigationController 的子视图数组中
navigation.viewControllers = @[firstVC,secondVC,thirdVC];
导航栏上面自己没有内容,只是view视图,导航栏上面的控件事当前栈顶控制器的数据,好比:title button。 导航栏只有一条,导航栏上面的数据是可变的
(1)自定义导航栏 背景颜色 填充颜色 标题 导航条类型
获取: navigationBar = navgationController.navigationBar
导航栏风格:黑底,透明。。:navigationBar.barStyle
填充颜色:navigationBar.barTinColor
导航栏上面空间的颜色:navigationBar.tintColor
导航栏是否透明:navigationBar.translucent
设置导航栏背景图片:navigationBar setBackgroundImage....
(2)UINavigationBar出了定义自身的样式外,还管理一组UInaavigationItem,UINavigationBar以栈的方式管理一组UINavigationItem。提供了push和pop操做item。 每一个视图控制器都有一个navigationItem属性,navigationItem中设置了左按钮,右按钮,标题等,会随着控制器的显示也会显示到navigationBar上面 导航栏标题:title
标题视图:titleView
左按钮:leftBarButton
右按钮:rightBarButton
(1)第一种:属性传值,应用在从当前界面日后面界面传
将要传到后面页面的属性的值设置成后面的属性,在切换页面的时候将要传送的值setter该属性
(2)第二种:代理传值,应用在后面界面往前面传
将当前页面设置为后面页面的代理,而且遵照后面页面自定义的协议。在后面页面切换至前面页面的时候让代理执行协议中的方法,协议中的方法
- (void)backFirstVC:(UIButton *)button { 返回上一个视图控制器 [self.navigationController popViewControllerAnimated:YES]; 代理传值:_textField.text [_delegate secondVCBackToFirstVCWithTextFieldString: _textField.text]; }