UINavigationController和UItableviewController一样也是iOS开发中常用的控件之一,今天就来学习一下它的常见用法。
        有人说tableview是最难的,因为涉及到和数据的交互,但在我看来,UINavigationController应该是相对来说挺复杂的一个控件,因为移动端的开发,用户体验是最重要的,所以好的视觉交互成了必不可少的一部分,这就要求我们在视觉层面上多下功夫,UINavigationController里面各属性的耦合,的确有些繁琐,今天就来好好看一下。
        UINavigationController是一个导航控制器,可以控制不同页面之间的跳转,比如我们通常做的,点击某个按钮进入到另一个页面,按返回又能回来,这就是导航控制器的作用,我们可以想象成在一个导航下面有N多个页面,这些页面都是受这一个导航控制的。
        UINavigationController具有好几个属性,我们暂且理解为分为好几层,它们分别为Navigationbar,Navigationtoolbar等。下面我们从UINavigationController的创建来开始它的学习。
        按照我们正常的逻辑,app在加载的时候是会有一个默认的rootView的,我们通常都是将我们需要展示的那个页面设为RootViewController,但是现在,我们是通过导航来管理我们的页面的,因而,在导航创建的时候,我们绑定我们需要展示的那个页面,在利用导航控制器的时候,我们一定要树立的思想是,页面在导航下,导航只有一个的概念,而不是想着导航只是页面上方的一个控件,这样思考不利于开发的进行。所以,我们首先创建一个UIViewController,我们将它命名为MyViewController,在appdelefate.m里,我们这样写:
MyViewController *mvc= [[FirstViewController alloc]init];  
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:mvc];
self.window.rootViewController = nav;

然后将根视图控制器设置成导航控制器,这样就成功的将页面加载到导航上面。

接下来我们需要明确一个概念:navigationBar
那什么是navigationBar呢?我们将其理解为导航条 。导航控制器是一个整体的概念,具体到我们直观看到的,是当前导航控制器的导航条,即navigationBar。而且,导航条是属于整个导航的,不是属于某一个固定的ViewController。如果我们不需要展示导航,那么我们应当这样设置:
 self.navigationController.navigationBarHidden = YES;
这样的话,导航条便不会显示。
同样的思路来思考问题,我们如果要设置导航条的背景色,当然也是要设置navigationBar的颜色
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
如果要设置选染色的话,应该为
 self.navigationController.navigationBar.tintColor = [UIColor greenColor];
好,现在我们知道了navigationBar针对整个导航而言的,那么现在我们需要对于单个页面的导航条进行我们的定制操作该怎么办呢?那就是接下来这个概念:navigationItem
比如我要设置当前页的导航Title,那么我就可以这样写:
 self.navigationItem.title = @"111";
从理论角度来看,navigationItem是UIViewController的一个属性,而且它是为UINavigationController服务的,从官方文档给出的解释来看,navigation item在navigation Bar代表一个viewController每一个加到navigationController的viewController都会有一个对应的navigationItem,所以,我们可以将这个属性看做每个每个页面独有的导航条。
所以,我们也可以创建一个Label,将我们的title用title的方式展现出来,titleView可以自定义

UILabel *titleLabel = [[UILabelalloc]initWithFrame:CGRectMake(0, 0, 60, 40)];

titleLabel.text = @"标题";

titleLabel.textAlignment = NSTextAlignmentCenter;

titleLabel.backgroundColor = [UIColorwhiteColor];

self.navigationItem.titleView = titleLabel;

在我们当前页的导航条上,我们经常需要创建按钮,首先第一种,导航条自带专用按钮UIBarButtonItem

也就是navigationItem的属性,一般分为三种:leftBarButtonItem,rightBarButtonItem,backBarButtonItem ,我们可以通过自定义,图片,文字,系统风格这几种样式去创建

UIBarButtonItem *lbn= [[UIBarButtonItemalloc]initWithTitle:@"lbn"style:UIBarButtonItemStyleBorderedtarget:selfaction:@selector(lbnClick)];

self.navigationItem.leftBarButtonItem = lbn;

当然,如果需要创建多个专用按钮,那我们可以给这些按钮加到一个数组里,然后添加数组为按钮就可以了。

导航还有一个属性,toolBar,它和导航条一样,是针对整个导航的,默认是隐藏的,我们需要先设置它的隐藏属性,才能够看到效果:

  self.navigationController.toolbarHidden = NO;
toolBar的高度为44,在当前页面的底部。和tabbar不一样的是,它设置的是当前页,tabbar则对应多个ViewController,通过这一行代码来定义toolBar的样式:
   [self.navigationController.toolbarsetBackgroundImage:[UIImageimageNamed:@"header_bg"] forToolbarPosition:UIBarPositionBottombarMetrics:UIBarMetricsDefault];
和导航条的专用按钮一样,我们同样可以通过不同方式创建toolBar的专用按钮,然后添加到self。toolBarItems中。
创建了按钮,我们可以给按钮添加点击事件,就按照正常的方式去添加就可以了。
导航里,如果我点击按钮跳转到新的页面,那么我们可以这样去实现:
[self.navigationController pushViewController:secondVC animated:YES];

或者是

[self.navigationController popViewControllerAnimated:YES];

pop与push有什么区别呢,push可以理解为跳转到固定的页面,pop则是返回,ViewController需要提前建立。

如果是普通按钮,跳转的页面也不在导航里,我们则可以使用present推出新页面。跳回方法:   
[self dismissViewControllerAnimated:<#(BOOL)#> completion:<#^(void)completion#>];
需要注意的一点是:当push出新页面时,是会自带一个返回按钮的,如果需要自己定制,那么要先隐藏然后再去自定义添加专用按钮。

 
 

iOS学习心得——UINavigationController的更多相关文章

  1. iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem

    http://blog.csdn.net/totogo2010/article/details/7681879 1.UINavigationController导航控制器如何使用 UINavigati ...

  2. [转]iOS学习之UINavigationController详解与使用(三)ToolBar

    转载地址:http://blog.csdn.net/totogo2010/article/details/7682641 iOS学习之UINavigationController详解与使用(二)页面切 ...

  3. [转]iOS学习之UINavigationController详解与使用(二)页面切换和segmentedController

    转载地址:http://blog.csdn.net/totogo2010/article/details/7682433 iOS学习之UINavigationController详解与使用(一)添加U ...

  4. iOS学习之UINavigationController详解与使用(三)ToolBar

    1.显示Toolbar  在RootViewController.m的- (void)viewDidLoad方法中添加代码,这样Toobar就显示出来了. [cpp] view plaincopy [ ...

  5. iOS学习之UINavigationController详解与使用(二)页面切换和segmentedController

    iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem是上篇,我们接着讲UINavigationController的重要作用,页面的管理和切换. ...

  6. iOS学习心得——UITableViewCell的复用

    UITableView是在iOS开发中最常用的控件之一.我的第一篇学习心得献给它了         UITableView是由一行一行的UITableViewCell构成的.         首先想这 ...

  7. [转]iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem

    转载地址:http://blog.csdn.net/totogo2010/article/details/7681879 1.UINavigationController导航控制器如何使用 UINav ...

  8. iOS学习之UINavigationController

    一.UINavigationController      1.UINavigationController:导航控制器,是iOS中最常用的多视图控制器之一,用它来管理多个视图控制器.可以称为是管理控 ...

  9. ios 学习路线总结

    学习方法 面对有难度的功能,不要忙着拒绝,而是挑战一下,学习更多知识. 尽量独立解决问题,而不是在遇到问题的第一想法是找人. 多学习别人开源的第三方库,能够开源的库一定有值得学习的地方,多去看别的大神 ...

随机推荐

  1. Java - 反射机制(Reflection)

    Java - 反射机制(Reflection)     > Reflection 是被视为 动态语言的关键,反射机制允许程序在执行期借助于 Reflection API 取得任何类的       ...

  2. iOS/iPhone 程序文件目录结构以及启动流程

    要想清晰的理解IOS应用程序的启动过程,毫无疑问需要深入了解一下ios应用程序的文件系统.一个ios应用程序都有一个属于自己沙盒(sandbox),应用沙盒就是文件系统目录,并且与文件系统的其他部分隔 ...

  3. 浏览器渲染页面过程描述,DOM编程技巧以及重排和重绘。

    一.浏览器渲染页过程描述 1.浏览器解析html源码,然后创建一个DOM树. 在DOM树中,每一个HTML标签都有一个对应的节点(元素节点),并且每一个文本也都有一个对应的节点(文本节点). DOM树 ...

  4. windows 7 旗舰版 切换 中英文 界面

    http://jingyan.baidu.com/article/f7ff0bfc4963612e26bb131e.html 如果遇到:想下载英语语言包,但是出现代码80070643,windowsu ...

  5. Asp.Net使用Bulk批量插入数据

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Di ...

  6. SQLServer游标详解

    一.游标概念 我们知道,关系数据库所有的关系运算其实是集合与集合的运算,它的输入是集合输出同样是集合,有时需要对结果集逐行进行处理,这时就需要用到游标.我们对游标的使用一本遵循“五步法”:声明游标—& ...

  7. trangleProble switch方法 java

    public class trangleProblem { static int res=1; int codePart=1; int n=100; Stack<Param> stack= ...

  8. javascript EcmaScript5 新增对象之Object.freeze

    我们都知道在js里对象是很容易改变的 var obj1 ={ a:'111' } obj1.a = '222'; console.log( obj.a ) //output 222 对象的属性发生了变 ...

  9. jeasyui制作计划-搭建php运行环境

    1.参考链接: http://jingyan.baidu.com/article/154b46315242b328ca8f4101.html http://jingyan.baidu.com/arti ...

  10. 关于web标准的理解(转)

    从开始接触所谓web标准化,差不多也有两年多的时候了吧.从最初的疑惑和彷徨一直到现在,经历了每一个阶段.这段过程是痛苦的也是开心的,痛苦的是这个过程中没有人可以帮你答疑解惑,所有的问题都要你自己去解决 ...