美文网首页
UINavigationController导航控制器

UINavigationController导航控制器

作者: ly渐行渐远 | 来源:发表于2015-12-04 19:52 被阅读1601次

    UINavigationController

    UINavigationController:导航控制器,是iOS中最常用的多视图控制器之一,它用来管理多个视图控制器。导航控制器可以认为是管理控制器的控制器,主要管理有层级关系的控制器。
    UINavigationController继承于UIViewController,以栈的方式管理所控制的视图控制器,至少要有一个被管理的视图控制器,这个控制器我们称作,导航控制器的根视图控制器。任何继承自UIViewController的类(多态)都可以作为根控制器。
    UINavigationController通过栈的方式管理控制器的切换,控制入栈和出栈来展示各个视图控制器。UINavigationController的ContentView里始终显示栈顶控制器的view。viewControllers属性存储了栈中的所有被管理的控制器navigationController属性,父类中的属性,每个在栈中的控制器,都能通过此属性,获取自己所在的UINavigationController对象。
    UINavigationController初始化

    //初始化rootVC(rootVC为navC的根视图控制器,也就是首个被navC管理的视图控制器)
    RootViewController *rootVC = [[RootViewController alloc] init];//自定义一个RootViewController类
    
    //初始化navC 初始化方法使用的是可以给navC设置根视图控制器的方法
    UINavigationController *navC = [[UINavigationController alloc] initWithRootViewController:rootVC];
    
    //将navC设置为window设置根视图控制器
    [self.window setRootViewController:navC];
    

    UINavigationController的常用方法

    pushViewController:animated:进入下一个视图控制器

    [self.navigationController pushViewController:secondVC animated:YES];```
    
    popViewControllerAnimated:返回上一个视图控制器
    `[self.navigationController popViewControllerAnimated:YES];`
    
    popToViewController:animated :返回到指定的视图控制器
    `[self.navigationController popToViewController:self.navigationController.viewControllers[0] animated:YES];`
    
    popToRootViewControllerAnimated:返回到根视图控制器
    `[self.navigationController popToRootViewControllerAnimated:YES];`
    
    ##UINavigationController常用属性
    viewControllers:所有处于栈中的控制器
    `NSLog(@"%@",self.navigationController.viewControllers);`
    
    topViewController:位于栈顶的控制器
    `NSLog(@"%@",self.navigationController.topViewController);`
    
    visibleViewController:当前正在显示的控制器
    `self.navigationController.visibleViewController`
    
    
    
    #navigationBar:
      导航条,iOS7之后默认是透明的,iOS7之前默认是不透明的UINavigationBar除了能定义自身的样式外,还管理一组UINavigationItem。
    
    ##navigationBar常用的属性
    barTintColor:navgationBar上面按钮的颜色
    `navC.navigationBar.barTintColor = [UIColor greenColor];`
    
    backgroundColor:背景颜色
    `navC.navigationBar.backgroundColor = [UIColor grayColor];`
    
    translucent:navigationBar的透明状态,默认是半透明的
    `navC.navigationBar.translucent = NO;`
    
    barStyle:设置navigationBar的样式,系统提供的只有两种
    `navC.navigationBar.barStyle = UIBarStyleBlack;`
    
    setBackgroundImage:forBarMetrics:设置navigationBar的背景图片
    *  UIBarMetricsDefault   横、竖屏状态下的背景图片
    *  UIBarMetricsCompact   横屏状态下得的景图片
    `[navC.navigationBar setBackgroundImage:[UIImage imageNamed:@"001.png"] forBarMetrics:UIBarMetricsDefault];`
    
    #UINavigationItem
    每个视图控制器都有一个navigationItem属性。navigationItem中设置的左按钮、右按钮、标题等,会随着控制器的显示,也显示到navigationBar上。UINavigationItem属于MVC中的M。封装了要显示在UINavigationBar上的数据。
    
    ##UINavigationItem常用属性
    title:标题,
    `self.navigationItem.title = @"导航控制器";`
    
    titleView:标题视图
    ``` UILabel *titleLable = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 40)];
    titleLable.text = @"titleView";
    titleLable.backgroundColor = [UIColor orangeColor];
    titleLable.textAlignment =  NSTextAlignmentCenter;
    self.navigationItem.titleView = titleLable;```
    
    leftBarButtonItem:左按钮(可以添加一组左按钮)
    ```//创建左边按钮
    UIBarButtonItem *leftBtnItem = [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStylePlain target:self action:@selector(leftBtnAction:)];
    self.navigationItem.leftBarButtonItem = leftBtnItem;```
    
    rightBarButtonItem:右按钮(可以添加一组右按钮)
    ```//创建navBar的右边按钮
    UIBarButtonItem *rightBtnItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self    action:@selector(rightBtnAction:)];
    //设置右边按钮
    self.navigationItem.rightBarButtonItem = rightBtnItem;
    

    界面间传值

    1.使用属性传值解决从前往后传值的问题,例如,A页面跳转到B页面,在B页面的控制器中,编写对应的属性,在A页面跳转到B页面的地方,给B的属性赋值。
    2.使用delegate解决从后往前传值的问题,例如,A页面跳转到B页面,在从B页面跳回A页面,把B页面的值传到A页面时使用代理的方法。首先,在B页面中的.h文件中添加协议和相应的代理属性,在B跳转到A页面时通过代理调用协议方法。其次,在A页面的.m文件中引入B页面的协议,并在A页面跳转到B页面时指定其自身为B页面的代理。最后在A页面中实现协议中的代理方法。

    相关文章

      网友评论

          本文标题:UINavigationController导航控制器

          本文链接:https://www.haomeiwen.com/subject/rnwjhttx.html