1.UINavigationController概述

UINavigationController继承于UIViewController,以栈的方式管理所控制的视图控制器,所以至少要有一 个被管理的视      图控制器

UINavigationController通过入栈和出栈来展示各个视图控制器


2.视图控制器重要属性及切换方法

2.1  UINavigationController的几个重要属性

  navigationController                //UINavigationController类型的属性,用于切换视图

   navigaitonItem                         //UINavigationItem类型的对象,用于生成UIBarButtonItem类型按钮

   navigationBar                          //UINavigationBar类型的属性,用于设置导航条的属性样式

   toolbarHidden                         //工具条:BOOL类型值,默认为YES,通常隐藏在最底部


2.2 视图切换方式

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

  popViewControllerAnimated              //返回上一个视图控制器

  popToViewController:animated          //返回到指定的视图控制器

  popToRootViewControllerAnimated   //返回到根视图控制器

视图切换步骤及注意事项:

 (1)创建button,barButton,p_w_picpathView等可交互的控件,设置点击事件

 (2)实现点击事件中的方法,初始化要跳转的视图控制器;如果有正向传值,将变量传递给下一个界面的属性变量

     ;如果有逆向传值,则设置代理对象,如SecondVC.delegate = self

 (3)将要显示的视图压入栈中

示例代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    //添加背景色
    self.view.backgroundColor = [UIColor cyanColor];
    //给导航栏添加标题,也可用self.title,因为UIViewController本身有title属性
    self.navigationItem.title = @"练习专用";
    UIBarButtonItem *rightBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:(UIBarButtonSystemItemAdd) target:self action:@selector(nextVC)];
    self.navigationItem.rightBarButtonItem = rightBtn;
                                                                                                                                                                                                                                                                               
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:(UIBarButtonSystemItemRewind) target:self action:@selector(next)];
                                                                                                                                                                                                                                                                               
    //添加一个label,用于传值到下一个页面
    _label1 = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 80, 30)];
    _label1.text = @"传值专用";
    _label1.textAlignment = NSTextAlignmentCenter;
    _label1.backgroundColor = [UIColor grayColor];
    [self.view addSubview:_label1];
                                                                                                                                                                                                                                                                               
    //添加一个label3,用于接收逆向代理传值(从后往前传值)
    _label3 = [[UILabel alloc] initWithFrame:CGRectMake(100, 150, 80, 30)];
    _label3.backgroundColor = [UIColor grayColor];
    [self.view addSubview:_label3];
    // Do any additional setup after loading the view.
}
//方法实现部分
//实现nextVC方法,用于跳转到下一视图控制器(***关键部分***)
- (void)nextVC
{
    //初始化一个SecondViewController
    SecondViewController *secVC = [[SecondViewController alloc] init];
    //第二个视图中的属性变量接收第一个视图中的参数传值
    secVC.str = _label1.text;
    //将secVC推入栈中
    [self.navigationController pushViewController:secVC animated:YES];
    //将secVC的代理指定为self,用于逆向传值(此句很关键,决定逆向传值能否成功)
    secVC.delegate = self;
    [secVC release];
}


3.UINavigationBar导航条

3.1修改UINavigationBar的背景颜色

   self.navigationController.navigationBar.barTintColor = [UIColoryellowColor];

 3.2 修改UINavigationBar的背景图片

   [self.navigationController.navigationBarsetBackgroundImage:[UIImagep_w_picpathNamed:@"猫猫.jpg"] forBarMetrics:UIBarMetricsDefault];

  self.navigationController.navigationBar.clipsToBounds = YES;  //图片过大可能会显示不全,可修剪边框

PS:对于navigationBar,iOS7默认的高度是64,如果将navigationBar的透明度关闭之后,

    navigationBar的高度将会变为44


3.3 导航条左右barButton

   leftBarButtonItem ,rightBarButtonItem

  初始化方法:  

  //可更改barButton标题

- (id)initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action;

 //使用系统内部的barButton样式

- (id)initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem target:(id)target action:(SEL)action;


***4.UINavigationController界面传值(重点!!!)**

4.1  属性传值(正向,从前往后传值)