UINavigationController与简单的页面传值

UINavigationController

导航控制器,是视图控制器的子类,作用是控制其他控制器,属于容器视图控制器。导航控制器控制的控制器是有层级关系的。比如:设置->通用->语言
UINavigationController继承于UIViewController,以栈的方式管理所控制的的视图控制器,至少有一个被管理的视图控制器,这个控制器称为导航控制器的根视图控制器

(1)创建

创建导航控制器并且为导航控制器添加根视图控制器

FirstViewController *firstVC = [[FirstViewController alloc]init];
UINavigationController *navC = [[UINavigationController 
alloc]initWithRootViewController:firstVC];

(2)工作原理

UINavigationController通过栈的方式管理控制器的切换,控制入栈和出栈来展示各个视图控制器,UINavigationControl的ContentView里面显示的是处于栈顶控制器的view

(3)常用属性

viewControllers 该属性存储了栈中的所有被管理的控制器navigationController 父类中的属性,每个在栈中的控制器,都能通过该属性获取自己所在的UINavigationController对象topViewController 获取位于栈顶的控制器visibleviewController 当前正在显示的控制器 navigationBar 获取导航条

(4)入栈与出栈

进入下一个视图控制器

pushViewController:animated

返回上一个视图控制器

popViewControllerAnimated:

返回到指定的视图控制器

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];
}


你可能感兴趣的:(ios,导航控制器,界面传值)