导航控制器

一、导航控制器


例如,有a b c d四个页面之间交互。如果吧A作为根视图控制器则:

需要在appDelegate中执行如下操作。


FirstViewController *first = [[FirstViewController alloc]init];

    //在这里做一个导航控制器,专门用来控制导航控制器的VC的,并把first作为整个导航控制的根视图控制器。

    //导航控制器本身也是一个试图控制器。也有试图控制器的所有特征。

    UINavigationController *nav =[[UINavigationController alloc] initWithRootViewController:first];

//释放first

[first release];

//nav当根。

    self.window.rootViewController = nav;

注:

/*

 导航条的frame 0 2032044.

 ios7之前导航条不影响状态条颜色,之后会影响。

 */


first到second:

核心代码在first中建一个btn,点击方法中实现:SecondViewController *second =[[SecondViewController alloc]init];

    //使用导航控制器吧second页面push出来,也叫把second压栈(入栈)。

    [self.navigationController pushViewController:second animated:YES];//第一个参数是要去的VC,第二个是要不要动画。

    [second release];

    

    /*

      1.吧一个新的VC添加进导航控制器的过程叫做入栈,结果会是的新的VC显示在界面上。

      2. 如果当前的VC是一个导航控制器的一员,就可以通过self.navigationController找到它梭子的导航控制器。

      3.使用导航控制器的 push方法,对心的VC执行入栈操作,引用计数会有一个自动加1

      4.所谓栈,就是后进先出,如:first先进,second后进,那么将来肯定second先从导航控制器中被移除掉。

     */


third回到根视图:

在点击方法中:
//使用popToRootViewControllerAnimated进行出栈操作,返回的是导航控制器的根视图控制器

    //同时堆当前VC与根视图控制器之间的所有VC执行那个出栈-1操作。

    [self.navigationController popToRootViewControllerAnimated:YES];


second返回上一个视图页面:

//返回上个页面

    [self.navigationController popViewControllerAnimated:YES];

    /*

     使用self.navigationController 执行pop方法对自己进行出栈操作,也就是返回上一页。

     出栈时候就相当于吧可变数组最后一位remove掉了,执行一个自动的-1

*/




从fourth回到second,则需要:

//找到想去的VCself.navigationController.viewControllers是一个数组,里面存了所有入栈的VC,通过下表就能找到对应的VC


   // SecondViewController *second = [[SecondViewController alloc] init];

    UIViewController *targetVC =  self.navigationController.viewControllers[1];

    //通过pop返回目标VC,并对当前与目标之间的所有VC执行-1出栈操作。

    [self.navigationController popToViewController:targetVC animated:YES];


二、NavBar(使用系统方法)


   设置导航条的风格

    1. self.navigationController.navigationBar这个可以找到当前的视图导航条

    self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;

   // self.navigationController.navigationBar.backgroundColor = [UIColor greenColor];

    

    //self.navigationController.navigationBar.tintColor = [UIColor greenColor];

    

    2. 贴一个图给bar

    UIImage *img = [UIImage imageNamed:@"navBg.png"];

    //给导航条设置背景图片(竖屏图片设置)

    [self.navigationController.navigationBar setBackgroundImage:img forBarMetrics:UIBarMetricsDefault];

    //land是横屏 default是竖屏。

    UIImage *imgLand = [UIImage imageNamed:@"navBg-32.png"];

//横屏图片设置。

    [self.navigationController.navigationBar setBackgroundImage:imgLand forBarMetrics:UIBarMetricsLandscapePhone];

    

    //设置title

    self.navigationItem.title = @"这是老大";


其他的Bar设置

1、设置titleView(任何UIView的子类都可以)

    UIView *view= [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 20)];//这里写的x,y没作用,最后肯定回居中。

    view.backgroundColor = [UIColor yellowColor];

    self.navigationItem.titleView = view;

    [view release];

    

    2、设置navBarButtonItem


    //我们可以参考UIButton,但他不是

    //第四个参数是方法

    

    //吧做好的item赋值给bar上的左item

    UIBarButtonItem *leftBtnItem = [[UIBarButtonItem alloc]initWithTitle:@"First" style:UIBarButtonItemStyleDone target:self action:@selector(leftDown)];

    self.navigationItem.leftBarButtonItem = leftBtnItem;

    [leftBtnItem release];

    

    //左侧items

    UIBarButtonItem *left1 = [[UIBarButtonItem alloc]initWithTitle:@"1" style:UIBarButtonItemStylePlain target:self action:@selector(leftDown)];

    

    UIBarButtonItem *left2 = [[UIBarButtonItem alloc]initWithTitle:@"2" style:UIBarButtonItemStylePlain target:self action:@selector(leftDown)];


    NSArray *itemArr = @[left1,left2];//同时放两个左items

    self.navigationItem.leftBarButtonItems = itemArr;

    [left1 release];

    [left2 release];

    

    //右侧

    UIBarButtonItem *right1 = [[UIBarButtonItem alloc] initWithTitle:@"3" style:UIBarButtonItemStylePlain target:self action:@selector(leftDown)];

    

     UIBarButtonItem *right2 = [[UIBarButtonItem alloc] initWithTitle:@"4" style:UIBarButtonItemStylePlain target:self action:@selector(leftDown)];

    NSArray *itemArr2 =@[right1,right2];

    self.navigationItem.rightBarButtonItems = itemArr2;

    [right1 release];

    [right2 release];

    

    //其他类型的BarButtonItem

    UIBarButtonItem *right3 = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"0.png"] style:UIBarButtonItemStylePlain target:self action:@selector(leftDown)];

   // self.navigationItem.leftBarButtonItem = right3;

    

 3、贴图型

    UIButton *rightBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

    rightBtn.frame = CGRectMake(0, 0, 80, 44);

    [rightBtn setTitle:@"你猜" forState:UIControlStateNormal];

    [rightBtn addTarget:self action:@selector(leftDown) forControlEvents:UIControlEventTouchUpInside];

    

    UIBarButtonItem *right9 = [[UIBarButtonItem alloc]initWithCustomView:rightBtn];

    //UIView的任意子类对象。

    

    NSArray *rightLastItemArr = @[right3,right9];

    self.navigationItem.rightBarButtonItems = rightLastItemArr;//右侧items为两个,一个为文字型的,一个为贴图型的。


三、自定义状态栏

首先在appDelegate中将first设置为根视图控制器。

然后再first中隐藏系统导航条:

//隐藏系统导航条

    self.navigationController.navigationBarHidden =YES;

然后自定义imageViewlabelbutton等构成一个itemBar。。。

详见/Users/qianfeng/liguoting/8.11/CustomNavBar/CustomNavBar/FirstViewController.m中实现。有封号的导航条类。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值