UINavigationController 详解(最全的)

UINavigationController即导航控制器,是iOS里最常用的交互控件之一。下面介绍一下它的详细用法以及一些小的技巧

一.UINavigationController的结构组成

看下图,UINavigationController有Navigation bar  ,Navigation View ,Navigation toobar等组成。


二.创建

在入口类里实现如下代码

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. ViewController *rootVC = [[ViewController alloc]init];  
  2.     UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:rootVC];  
[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. self.window.rootViewController = nav;  

或者在根控制器里实现

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. UINavigationController *nav = [[UINavigationController alloc] init];  
  2.     UIViewController *aView = [[UIViewController alloc] init];  
  3.     [nav pushViewController:aView animated:NO];//导航栏的第一个视图不要动画化  

其中的rootVC就是导航控制器的根控制器,aView是根视图。


三.对导航条的设置

        //添加标题

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. self.navigationItem.title = @"根视图";  
  2. //给导航条加背景图  
  3. [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"bg"] forBarMetrics:UIBarMetricsDefault];  
  4. //添加titleView,可以用来自定义标题格式,也可以放置图片标题,图片大小要适中  
  5. self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"titleView.png"]];  
  6. //改变标题的颜色  
  7. self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor greenColor] forKey:NSForegroundColorAttributeName];  
  8.   
  9. //添加Logo,只在第一个页面显示,一些项目的主页会用到这个需求  
  10. UIView *shareNavleftView = [[UIView alloc] init];  
  11. shareNavleftView.frame = CGRectMake(0011535);  
  12. UIImageView *img = [[UIImageView alloc] init];  
  13. img.image = [UIImage imageNamed:@"logo"];  
  14. img.autoresizingMask = UIViewAutoresizingFlexibleWidth;  
  15. img.frame = shareNavleftView.frame;  
  16. [shareNavleftView addSubview:img];  
  17. self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:shareNavleftView];  
  18. //添加左右按钮  
  19. UIBarButtonItem * leftItem = [[UIBarButtonItem alloc]initWithTitle:@"left" style:UIBarButtonItemStylePlain target:self action:@selector(leftClick)];  
  20. self.navigationItem.leftBarButtonItem = leftItem ;  
  21. UIBarButtonItem * rightItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemPause target:self action:@selector(rightItemClick)];  
  22. self.navigationItem.rightBarButtonItem = rightItem ;  
  23. //也可以简化为一句代码  
  24. self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"left" style:UIBarButtonItemStylePlain target:self action:@selector(leftClick)];  
  25. self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemPause target:self action:@selector(rightItemClick)];</span>  
[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //隐藏导航栏  
  2. self.navigationController setNavigationBarHidden:YES animated:YES];</span>  


四.界面之间的交互,采用的是出栈、入栈的形式

//进入到下一个界面

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. FirstViewController *firstVC = [[FirstViewController alloc]init];  
  2. self.navigationController pushViewController:firstVC animated:YES];  

//返回之前的界面

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. [self.navigationController popViewControllerAnimated:YES];  

//返回指定的界面

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. [self.navigationController popToViewController:secondVC animated:YES];  

//返回根视图

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. [self.navigationController popToRootViewControllerAnimated:YES];  



五.其他细节

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //隐藏返回按钮  
  2. self.navigationItem.hidesBackButton =YES;  

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //设置导航栏透明  
  2. self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)  
  3. //设置导航栏下部的线不显示  
  4. self.navigationController?.navigationBar.shadowImage = UIImage()  


六.含有导航栏的视图里tableView的坐标问题

所有版本对含有导航的视图控制器中的view有影响的因素有

self.edgesForExtendedLayout

self.navigationController!.navigationBar.translucent

self.automaticallyAdjustsScrollViewInsets

self.extendedLayoutIncludesOpaqueBars


具体我另开了一篇博文: http://blog.csdn.net/riven_wn/article/details/50856625
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值