http://blog.csdn.net/weisubao/article/details/39646739?utm_source=tuicool&utm_medium=referral

(1)navigationBar导航条可以看做是self.navigationController导航控制器的一个属性,可以直接用点来表示self.navigationController.navigationBar,当然navigationBar自己还有很多属性,比如样式barStyle、背景backgroundColor、frame属性(可以获取宽高这些信息),还可以用setBackgroundImage方法设置背景图片,当然图片多了可以使用clipsToBounds剪裁。

(2)但,navigationBar是否隐藏和显示这个需要它爸也就是self.navigationController来控制,有直接.navigationBarHidden设置为YES/NO,也可以用方法setNavigationBarHidden,都能实现效果。

(3)另一个重要的知识是对navigationItem的设置,这个属性和navigationController是平级的,所以直接可以用self.navigationItem使用。当然可用的有设置导航条标题的方法setTitle,当然你也可以直接把文字换成一个视图,即所谓的标题视图放在导航条的中间,用得方法是setTitleView,很多游戏的导航条中间貌似是一个图片,可以用这个。

(4)最重要的可能是给navigationItem设置左右两边的按钮,一般默认的在左边有“返回”,在右边的有“摄像头”(如微信朋友圈)。步骤就是创建一个UIBarButtonItem对象,然后直接把这个对象赋值给self.navigationItem.leftBarButtonItem或者右边的。当然也可以一次创建很多个UIBarButtonItem组成一个数组,然后把这个数组赋值给self.navigationItem.leftBarButtonItems,注意后面这个和前面这个相比,多了一个“s”,有很多个。也要注意一下有多个按钮时的排列顺序。

(5)我们创建的这些导航条按钮有很多种形式,有的是由文字的,有的时图片,有的时系统自带的如摄像头或者Reply这些icon,有的完全是自己定义的视图。我们当然也可以利用自己创建的导航条按钮来覆盖原来导航控制器产生的默认的按钮,如“<Back”。

同样,需要创建两个视图控制器(ViewController根视图控制器,SecondViewController子视图控制器),然后放在导航控制器栈中。并且在AppDelegate.m中进行把导航控制器赋值给self.window.rootViewController。

在ViewController.m中:

  1. #import "ViewController.h"
  2. #import "SecondViewController.h"
  3. @interface ViewController ()
  4. @end
  5. @implementation ViewController
  6. - (void)viewDidLoad {
  7. //创建一个按钮,点击后进入子视图控制器,相当于进入子页面
  8. UIButton *btn1=[UIButton buttonWithType:UIButtonTypeRoundedRect];
  9. btn1.frame=CGRectMake(38, 100, 300, 30);
  10. [btn1 setTitle:@"jump to secondviewcontroller" forState:UIControlStateNormal];
  11. btn1.backgroundColor=[UIColor whiteColor];
  12. self.view.backgroundColor=[UIColor redColor];
  13. [btn1 addTarget:self action:@selector(jumpTo) forControlEvents:UIControlEventTouchUpInside];
  14. [self.view addSubview:btn1];
  15. //设置导航条样式
  16. //默认的时白色半透明(有点灰的感觉),UIBarStyleBlack,UIBarStyleBlackTranslucent,UIBarStyleBlackOpaque都是黑色半透明,其实它们有的时不透明有的时透明有的时半透明,但不知为何无效果
  17. self.navigationController.navigationBar.barStyle=UIBarStyleDefault;
  18. //设置导航条背景颜色,也是半透明玻璃状的颜色效果
  19. self.navigationController.navigationBar.backgroundColor=[UIColor orangeColor];
  20. //可以用self.navigationController.navigationBar.frame.size获得高宽,还有self.navigationController.navigationBar.frame.origin获得x和y
  21. //高44,宽375,如果是Retina屏幕,那么宽和高@2x即可分别是750和88
  22. //x是0很明显,y是20,其中上面20就是留给状态栏的高度
  23. NSLog(@"%f",self.navigationController.navigationBar.frame.origin.y);
  24. //隐藏导航条,由此点击进入其他视图时导航条也会被隐藏,默认是NO
  25. //以下一个直接给navigationBarHidden赋值,一个调用方法,都是一样的,下面一个多了一个动画选项而已
  26. self.navigationController.navigationBarHidden=NO;
  27. [self.navigationController setNavigationBarHidden:NO animated:YES];
  28. //给导航条增加背景图片,其中forBarMetrics有点类似于按钮的for state状态,即什么状态下显示
  29. //UIBarMetricsDefault-竖屏横屏都有,横屏导航条变宽,则自动repeat图片
  30. //UIBarMetricsCompact-竖屏没有,横屏有,相当于之前老iOS版本里地UIBarMetricsLandscapePhone
  31. //UIBarMetricsCompactPrompt和UIBarMetricsDefaultPrompt暂时不知道用处,官方解释是Applicable only in bars with the prompt property, such as UINavigationBar and UISearchBar,以后遇到时再细说
  32. [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"big2.png"] forBarMetrics:UIBarMetricsDefault];
  33. //如果图片太大会向上扩展侵占状态栏的位置,在状态栏下方显示
  34. //clipsToBounds就是把多余的图片裁剪掉
  35. self.navigationController.navigationBar.clipsToBounds=YES;
  36. //设置导航标题
  37. [self.navigationItem setTitle:@"主页"];
  38. //设置导航标题视图,就是这一块可以加载任意一种视图
  39. //视图的x和y无效,视图上下左右居中显示在标题的位置
  40. UIView *textView1=[[UIView alloc]initWithFrame:CGRectMake(10, 10, 50, 30)];
  41. textView1.backgroundColor=[UIColor whiteColor];
  42. [self.navigationItem setTitleView:textView1];
  43. //设置导航条的左右按钮
  44. //先实例化创建一个UIBarButtonItem,然后把这个按钮赋值给self.navigationItem.leftBarButtonItem即可
  45. //初始化文字的按钮类型有UIBarButtonItemStylePlain和UIBarButtonItemStyleDone两种类型,区别貌似不大
  46. UIBarButtonItem *barBtn1=[[UIBarButtonItem alloc]initWithTitle:@"左边" style:UIBarButtonItemStylePlain target:self action:@selector(changeColor)];
  47. self.navigationItem.leftBarButtonItem=barBtn1;
  48. //我们还可以在左边和右边加不止一个按钮,,且可以添加任意视图,以右边为例
  49. //添加多个其实就是rightBarButtonItems属性,注意还有一个rightBarButtonItem,前者是赋予一个UIBarButtonItem对象数组,所以可以显示多个。后者被赋值一个UIBarButtonItem对象,所以只能显示一个
  50. //显示顺序,左边:按数组顺序从左向右;右边:按数组顺序从右向左
  51. //可以初始化成系统自带的一些barButton,比如UIBarButtonSystemItemCamera是摄像机,还有Done,Reply等等,会显示成一个icon图标
  52. //还可以initWithImage初始化成图片
  53. //还可以自定义,可以是任意一个UIView
  54. UIBarButtonItem *barBtn2=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(changeColor2)];
  55. UIBarButtonItem *barBtn3=[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"logo-40@2x.png"] style:UIBarButtonItemStylePlain target:self action:@selector(changeColor3)];
  56. UIView *view4=[[UIView alloc]initWithFrame:CGRectMake(10, 10, 20, 20)];
  57. view4.backgroundColor=[UIColor blackColor];
  58. UIBarButtonItem *barBtn4=[[UIBarButtonItem alloc]initWithCustomView:view4];
  59. NSArray *arr1=[[NSArray alloc]initWithObjects:barBtn2,barBtn3,barBtn4, nil nil];
  60. self.navigationItem.rightBarButtonItems=arr1;
  61. [super viewDidLoad];
  62. // Do any additional setup after loading the view, typically from a nib.
  63. }
  64. -(void)changeColor{
  65. self.view.backgroundColor=[UIColor purpleColor];
  66. }
  67. -(void)changeColor2{
  68. self.view.backgroundColor=[UIColor whiteColor];
  69. }
  70. -(void)changeColor3{
  71. self.view.backgroundColor=[UIColor orangeColor];
  72. }
  73. -(void)jumpTo{
  74. //这里面核心的有两个,所谓跳转,其实就是往导航控制器栈中PUSH或者POP一个视图控制器,这样在最上面的视图控制器就变了,这样视图也跟着变了,因为只显示在栈顶得那个视图控制器的视图
  75. //所以(1)控制所谓的跳转,其实是导航控制器在控制,在里面的元素都可以通过navigationController属性获取到它们所在的导航控制器
  76. //所以(2)获取到导航控制器之后,使用Push的那个方法,往栈里面放一个视图控制器senCon1,这个新放入的在栈顶,就显示它的视图,所以用户改变页面跳转了
  77. SecondViewController *senCon1=[[SecondViewController alloc]init];
  78. [self.navigationController pushViewController:senCon1 animated:YES];
  79. }
  80. @end

在SecondViewControllor.m中:

  1. #import "SecondViewController.h"
  2. @interface SecondViewController ()
  3. @end
  4. @implementation SecondViewController
  5. - (void)viewDidLoad {
  6. UILabel *label1=[[UILabel alloc]init];
  7. label1.frame=CGRectMake(38, 80, 300, 30);
  8. label1.backgroundColor=[UIColor whiteColor];
  9. label1.text=@"This is secondviewcontroller";
  10. [self.view addSubview:label1];
  11. UIButton *btn2=[UIButton buttonWithType:UIButtonTypeRoundedRect];
  12. btn2.frame=CGRectMake(38, 120, 300, 30);
  13. [btn2 setTitle:@"backTo" forState:UIControlStateNormal];
  14. btn2.backgroundColor=[UIColor orangeColor];
  15. [self.view addSubview:btn2];
  16. [btn2 addTarget:self action:@selector(backTo) forControlEvents:UIControlEventTouchUpInside];
  17. //设置导航标题,这个时候的返回按钮的title就是上一级的navigationItem的title文字
  18. [self.navigationItem setTitle:@"子页"];
  19. //我们也可以在子页中自定义一个返回按钮覆盖原先的"<back"
  20. UIBarButtonItem *barBtn5=[[UIBarButtonItem alloc]initWithTitle:@"回家" style:UIBarButtonItemStylePlain target:self action:@selector(backTo)];
  21. self.navigationItem.leftBarButtonItem=barBtn5;
  22. [super viewDidLoad];
  23. // Do any additional setup after loading the view.
  24. }
  25. -(void)backTo{
  26. [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];
  27. }
  28. @end

截个图:

【iOS开发-22】navigationBar导航条和navigationItem设置:基本搞定导航条上的文字和按钮以及各种跳转的更多相关文章

  1. iOS开发——实用技术OC篇&8行代码教你搞定导航控制器全屏滑动返回效果

    8行代码教你搞定导航控制器全屏滑动返回效果 前言 如果自定了导航控制器的自控制器的leftBarButtonItem,可能会引发边缘滑动pop效果的失灵,是由于 self.interactivePop ...

  2. iOS开发UI篇—iOS开发中三种简单的动画设置

    iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...

  3. iOS开发UITableViewCell的选中时的颜色设置(转)

    iOS开发UITableViewCell的选中时的颜色设置   1.系统默认的颜色设置 //无色 cell.selectionStyle = UITableViewCellSelectionStyle ...

  4. jquery侧边折叠导航栏制作,两行代码搞定

    jquery侧边折叠导航栏制作,两行代码搞定 //CSS*{margin: 0;padding: 0} ul{list-style: none} .menu li ul{display: none} ...

  5. 【iOS开发-22】navigationBar导航栏,navigationItem建立:获取导航栏中的基本文本和button以及各种跳跃

    (1)navigationBar导航栏可以被看作是self.navigationController一个属性导航控制器,它可以由点直接表示self.navigationController.navig ...

  6. 5行js代码搞定导航吸顶效果

    一.HTML布局 首先写HTML布局 <body> <div id="wrap"></div> </body> 二.CSS样式 给点 ...

  7. AJ学IOS(41)UI之核心动画 两行代码搞定3D转场

    AJ分享,必须精品 效果: 代码: 其实代码很少,苹果都给封装好了 // 1.创建核心动画 CATransition *ca = [CATransition animation]; // 1.1动画过 ...

  8. iOS开发 关于启动页和停留时间的设置

    引言: 在开发一款商业App时,我们大都会为我们的App设置一个启动页. 苹果官方对于iOS启动页的设计说明: 为了增强应用程序启动时的用户体验,您应该提供一个启动图像.启动图像与应用程序的首屏幕看起 ...

  9. iOS开发之数据存储之Preference(偏好设置)

    1.概述 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能. 每个应用都有个NSUserDefaults实例,通过它来存取偏好 ...

随机推荐

  1. ecshop 如果缩略图为空,使用默认图片

    引用:$row['goods_img'] = get_image_path($row['goods_id'], $row['goods_img']); lib_common.php /** * 重新获 ...

  2. 获取C#代码执行的时间(精确到毫秒)

    using System.Diagnostics;//引用相关的命名空间Stopwatch st=new Stopwatch ();//实例化类st. Start();//开始计时 //需要统计时间的 ...

  3. Rsession让Java调用R更简单

    Rsession让Java调用R更简单 R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒. ...

  4. Oracle CASE WHEN 用法介绍

    1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索 ...

  5. Nginx-tomcat-redis------负载均衡以及session共享

    测试环境 Nginx 1.10.1 tomcat 7.0.70 Redis-x64-3.2.100 说明 tomcat 8 和 redis 实现session共享 有问题. 寻找源码 发现tomcat ...

  6. HTML5游戏设计与开发 小白7-9月的动态

    好久没有更新博客了,最近在努力修炼提升逼格,当然了还有个恶心的毕业论文... 当然啦...在写这个论文的时候也就是为了提升下自身的技术,毕竟我的公司也不是游戏公司,SO 我决定开发个手机游戏.然后考虑 ...

  7. 避免重定向301&302 (Avoid Redirects)

    这个也是Best Practices for Speeding Up Your Web Site的第12条原则: 重定向的意思是,用户的原始请求(例如请求A)被重定向到其他的请求(例如请求B).这是H ...

  8. NUGet的诞生与使用

    本文引用地址:http://msdn.microsoft.com/zh-cn/magazine/hh547106.aspx NuGet 使用 NuGet 管理项目库 Phil Haack 无论多么努力 ...

  9. Redis数据库的使用与介绍

    本周11-15号开始用Redis数据库在现有的平台基础上开发一个独立模块,这是一个边学习.边记录.边交流.边开发.边总结的过程.大部分随笔都是个人的“工作日志”,旨在记录自己学习过程中收集的一些资料, ...

  10. 一张图告诉你,只会CSS还不够!

    会了CSS语法.会了CSS选择器,你就真的会了CSS吗,来看这张图!是超实用的CSS代码段的导览!熊孩子们,赶紧学习去吧! 这是一个Web开发最好的时代,每天都有30000条职位信息,面向互联网,我们 ...