一. 导航控制器总述:

UINavigationController是用于构建分层应用程序的主要工具,主要采用栈形式来实现视图。任何类型的视图控制器都可放入栈中。在设计导航控制器时需要指定根视图即用户看到的第一个视图。根视图控制器是被导航控制器推入到栈中的第一个视图控制器。当用户查看下一个试图时,栈中将加入一个新的视图控制器,它所控制的视图将展示给用户。我们可以通过导航按钮来操作分层的应用程序,用它来控制视图的推入或推出。

二. 构建导航应用程序的骨架:

Xcode已经提供了导航应用程序的模板。但我们还是从零开始创建一个导航的应用程序以便更好的理解导航是如何构成及工作的。当然你也可以直接使用Xcode提供好的模板

1. 创建一个基于Windows-Based Application (注:Xcode 4.2.1是创建一个Empty Application 这个模板创建好之后没有mainWindow.xib 它在代码中创建了一个window不知道apple公司为什么要这样做?难道是鼓励大家少用xib? 呵呵。不过我们可以手动添加一个mainWindow.xib,添加方法请访问http://blog.csdn.net/decemberd/article/details/7066763)

2. 创建一个视图控制器用于显示根视图。这里你可以显示任何你想显示的内容。我们仅以FirstLevelViewController作为例子。(你需要在这个类中填充你想显示的内容)

3. 设置导航控制器

a. 在程序的AppDelegate.h中加入UINavigationController *navController并添加输出口。

b.在.m文件中申明属性后在didFinishLaunchingWithOption函数中将控制器加入windows视图,代码如下:        [window addSubview:navController.view];

c. 托一个NavigationController控件到mainWindow.xib

d. 按下control键从Nav App Delegate图标拖到新的NavigationController图标选择navController输出口

e. 指定根视图:选中Navigation Controller目录下的Root ViewController,按下cmd+4键打开身份检查器将基类改为我们刚才创建的FirstLevelViewController类。如果你的FirstLevelViewController类已经填充完毕我们就可以开始运行程序了。

看一下,运行程序是不是我们所期望的那样???

三. 构建导航按钮:

导航应用程序中经常应用导航按钮来控制视图的推入推出,这种设计模式可以反复的构建复杂的分层应用程序,那么导航按钮是如何实现的呢?

上图中的Back按钮和Next按钮就是导航按钮我们可以通过UIBarButtonItem来设置导航按钮,例如下面的代码就是我们在导航的工具条上创建了两个按钮,一个back按钮一个next按钮:

//设置导航按钮

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(backButtonPressd)];

//第一个参数为按钮标题

//第二个参数是按钮样式

//第三个参数接受消息的对象

//第四个参数是按钮的回调函数

[[self navigationItem] setLeftBarButtonItem:backButton];

//设置为左边按钮

//释放按钮

[backButton release];

//设置导航按钮

UIBarButtonItem *rootButton = [[UIBarButtonItem alloc] initWithTitle:@"Root" style:UIBarButtonItemStyleBordered target:self action:@selector(rootButtonPressd)];

//第一个参数为按钮标题

//第二个参数是按钮样式

//第三个参数接受消息的对象

//第四个参数是按钮的回调函数

[[self navigationItem] setRightBarButtonItem:rootButton];

//设置为右边按钮

//释放按钮

[rootButton release];

这段代码应该很容易理解,我们创建了一个导航按钮,设置了标题,按钮风格和按钮的回调函数,然后setLeftBarButtonItem 是将它设置为左边按钮相应的setRightBarButtonItem是设置为右边按钮

四. 导航控制器视图的推入推出:

那么导航控制器是如何推入一个试图或者如何推出一个试图的呢?

它是通过navigationController的pushViewController: animated:函数实现的。看下面这段代码:

//创建新的试图并将试图推入栈中

SecondLevelViewController*secondController = [[SecondLevelViewController alloc]initWithNibName:@"SecondLevelViewController" bundle:nil];

UINavigationController  *theNavController = [[UINavigationController alloc]

initWithRootViewController:secondController];

[secondControllerrelease];

theNavController.navigationBar.tintColor =[UIColor blackColor];

[self.navigationController pushViewController:secondController animated:YES];

[theNavController release];

我们创建了一个试图并把他加入Nav最后通过pushViewController把它放入栈中此时SecondLevelViewController所控制的视图也会出现在用户眼中,下面就是我们新弹出的视图:

那么如何推出视图呢?相信你一定已经猜到了,push相对应的便是pop,popViewControllerAnimated将当前的视图控制器推出了栈,还有一种是我们在进行了很多视图之后想直接返回到根试图,它也一样很容易实现popToRootViewControllerAnimated就可以帮我们直接到达栈的最底层也就是根视图,在下图的Root按钮中我们直接调用[self.navigationController popToRootViewControllerAnimated:YES];就可以回到根试图了

详细代码请查阅Nav demo地址:http://download.csdn.net/detail/decemberd/3920630

有关更多的navigationController的操作请查看官方文档。谢谢

iphone开发导航控制器的使用相关推荐

  1. Iphone开发用导航控制器实现视图的分层切换(UINavigationController)

    Iphone和android手机的一个不同的地方是,大部分的android手机都有返回键,而Iphone只有一个home键,所以我们会发现在Iphone的大部分应用中会在顶部有一个导航条,比如系统的设 ...

  2. .ne中的控制器循环出来的数据如何显示在视图上_让不懂编程的人爱上iPhone开发系列2 iOS12+Swift4.2版-Checklists-16...

    让不懂编程的人爱上iPhone开发系列2 iOS12+Swift4.2版-Checklists-16 添加导航栏按钮 说明: 本系列教程改编自raywenderlich.com中的iOS Appren ...

  3. IOS开发入门(11)-导航控制器(1)

    IOS开发入门(11)-导航控制器I:层级结构和标签 前言:(直接从书上抄的) 大多数应用程序是由主视图导出多个屏幕,并且通常情况下实现屏幕切换的方法还不止一种.我们需要一种方式来实现用户在应用程序内 ...

  4. iOS开发UI篇—多控制器和导航控制器简单介绍

    iOS开发UI篇-多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个vi ...

  5. iPhone App开发导航条(Navigation Bar)素材PSD下载

    不管是iPhone还是Android的应用App界面基本上最上方都会有个导航条(Navigation Bar).于是我决定创建此页面整理收集所有好看的适合在iPhone App应用开发中使用的导航条素 ...

  6. iOS开发UINavigation系列四——导航控制器UINavigationController

    iOS开发UINavigation系列四--导航控制器UINavigationController 一.引言 在前面的博客中,我么你介绍了UINavigationBar,UINavigationIte ...

  7. iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期

    一.基本过程 新建一个项目,系统默认的主控制器继承自UIViewController,把主控制器两个文件删掉. 在storyboard中,默认的控制器是View Controller,而我们需要的是导 ...

  8. IOS开发UI篇—导航控制器属性和基本使用

    IOS开发UI篇-导航控制器属性和基本使用 一.导航控制器的一些属性和基本使用 1.把子控制器添加到导航控制器中的四种方法 (1) 1.创建一个导航控制器 UINavigationController ...

  9. IOS开发-表视图LV3导航控制器

    学到这里感觉有点难了,其实这篇文章再草稿箱里放了好久了~ 最近对于学习的热情下降了.这不行-抓紧学习走起! 在这一章节的学习中主要针对导航控制器及表视图来建立多视图的应用, 首先要了解一些概念-- 1 ...

最新文章

  1. UVA 413|LA 5388|POJ 1492|ZOJ 1338 Up and Down Sequences
  2. wxWidgets:wxPython 概述
  3. r语言 去除双引号_tidyfst vs pandas(12):去除重复条目
  4. 科大讯飞 jason word_2019科大讯飞全球1024开发者节开幕啦
  5. margin折叠-从子元素margin-top影响父元素引出的问题
  6. MongoDB非关系型数据库开发手册
  7. 【原创】技术人员如何去面试?
  8. 超强一代JupyterLab发布,可视化调试、中文显示、简单交互界面
  9. C++自由存储空间:new
  10. 使用git同时连接gitlab和GitHub
  11. 宾大最新《图神经网络》课程,附视频与课件
  12. informix设置数据库默认插入时间_informix常用时间运算和操作方式
  13. php curl_setopt 登录 获取数据
  14. Android 自定义Drawable实现圆角矩形图片和圆形图片
  15. WPF参考书籍及资料推荐(转)
  16. @Autowired与@Resource区别
  17. 【阅读笔记】旋转目标检测R3Det与BBAvector
  18. node.js版本不同,跑不起项目(个人笔记)
  19. 容错性低是什么意思_王者荣耀:在成为高手之前,这4位容错率低的千万别碰!...
  20. GPU的发展史,GPU与CPU的关系是什么?为何现在GPU越来越重要?

热门文章

  1. Mac命令行退出vim
  2. php 开发ui框架,5 个优秀前端 UI 框架
  3. 监控Linux服务器状态
  4. 连云港php培训学校,连云港php培训
  5. Stock 股票因子
  6. Rides 入门(五)实现乐观锁
  7. MSAA 的基本原理
  8. 能在业余时间赚钱、不干扰正常工作的副业
  9. 使用Windows[任务计划程序]设置定时任务
  10. 嵌入式项目烂尾的真实原因