IOS 学习 开发 自定义 UINavigationController 导航

文件目录如下:基本导航顺序: root -> First -> Second -> Third。其中,FirstViewController作为 navigation堆栈的rootview

1、创建navigation。

如果是想直接把navigation导航作为项目一开始的跟视图,把RootViewController.h文件里的nav属性放到AppDelegate.h里即可,再把RootViewController.m文件里的action的代码复制到 AppDelegate.m里的didFinishLaunchingWithOptions 方法里,最后把 self.window.rootViewController 设置 UINavigationController类型的属性nav即可

在RootViewController.h文件

 1 #import <UIKit/UIKit.h>
 2 @class FirstViewController;
 3
 4 @interface RootViewController : UIViewController
 5
 6 @property (strong, nonatomic) UINavigationController *nav;
 7
 8 - (IBAction)btnClick:(UIButton *)sender;
 9
10 @end

在RootViewController.m 文件里的随意一个自定义action里:

 1 - (IBAction)btnClick:(UIButton *)sender {
 2
 3     //创建一个viewcontroller
 4     FirstViewController *fristview =[[[FirstViewController alloc] init] autorelease];
 5
 6
 7     //初始化UINavigationController(方式一)
 8     self.nav = [[[UINavigationController alloc] initWithRootViewController:fristview] autorelease];
 9
10
11     //初始化UINavigationController(方式二)
12   //  self.nav = [[[UINavigationController alloc] init] autorelease];
13   //  [self.nav pushViewController:fristview animated:YES];
14
15
16     //初始化UINavigationController(方式三,失败,xib文件加载失败,原因暂时不明)
17    // self.nav = [[[UINavigationController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease];
18
19
20     //跳转到FirstView页面
21     [self presentViewController:self.nav animated:YES completion:nil];
22
23
24     //这种写法一般用于往view里添加一些小控件,如button  label textField之类的,不适宜用于页面跳转
25     // [self.view addSubview:self.nav.view];
26
27
28 }

2、设置viewcontroller的navigationItem属性和 toolbar、toolbarItem

(1)firstViewcontroller的navigation属性和toolbarItem属性。代码在firstviewcontroller.m的viewdidLoad方法里

每个viewcontroller都有一个navigationItem属性(只在被加载到导航堆栈里才有效),navigationItem属性里又有5个属性:UIBarButtonItem类型的leftBarButtonItem、rightBarButtonItem和backBarButtonItem,NSString类型的title(或者viewcontroller属性的titleView)、prompt。

 1 - (void)viewDidLoad
 2 {
 3     [super viewDidLoad];
 4     // Do any additional setup after loading the view from its nib.
 5
 6     //下面两句代码的效果一样,但貌似设置了navigationItem.title 后 title就会被不起作用了
 7     self.navigationItem.title =  @"首页123";
 8     self.title = @"首页";
 9
10     //在title上面再加多一行,但这样子就会造成导航栏的宽度变宽
11   //  self.navigationItem.prompt = @"prompt";
12
13     //设置rightbarbuttonitem
14     UIBarButtonItem *rightbar = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(btnClick:)] autorelease];
15
16     self.navigationItem.rightBarButtonItem = rightbar;
17
18     //修改backbarbuttonitem的title.这个backbarbutton是显示在下一个push进来的view的tabbar的左边的
19     //action可以设置为nil,这是的动作就是默认的动作,也就是返回到这个view
20     self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStylePlain target:self action:nil] autorelease];
21
22
23
24     //设置toolbar是否可见(对整个navigation堆栈里的view起作用,起全局作用)
25     self.navigationController.toolbarHidden = NO;
26
27     UIBarButtonItem *three = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:nil action:nil];
28     UIBarButtonItem *four = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:nil action:nil];
29     UIBarButtonItem *flexItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
30
31     //toolbar是整个navigation堆栈里的view共同的,但toolbar上面的items却是每个view单独拥有的
32     //现在只是设置了当前view的toolbaritem,与其他view的toolbaritme是没有关系的
33     [self setToolbarItems:[NSArray arrayWithObjects:flexItem, three, flexItem, four, flexItem, nil]];
34
35     [three release];
36     [four release];
37     [flexItem release];
38
39
40 }

页面效果如下:

(2)、secondviewcontroller的navigationItem和toolbarItem

代码在viewdidLoad方法里

 1 - (void)viewDidLoad
 2 {
 3     [super viewDidLoad];
 4     // Do any additional setup after loading the view from its nib.
 5
 6     //设置左右barbutton
 7     UIBarButtonItem *rightbar = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(gotoThird:)] autorelease];
 8
 9     UIBarButtonItem *leftbar = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(gotoThird:)] autorelease];
10
11     self.navigationItem.rightBarButtonItem = rightbar;
12     self.navigationItem.leftBarButtonItem = leftbar;
13
14     //当前view在navigation堆栈里不是rootview,所以把该viewpush到navigation堆栈里时,tabbar左边会显示backbarbutton
15     //如果给当前view设置了leftbarbutton,会把把backbarbutton覆盖掉,想同时显示两者,需如下设置:
16     self.navigationItem.leftItemsSupplementBackButton = YES;
17
18
19
20     //设置当前view的toolbar可见.因为有可能从一个toolbar不可见的view导航到当前view
21     self.navigationController.toolbarHidden = NO;
22
23 }

效果如下:

(3)、thirdviewcontroller的navigationItem和toolbaritem

 1 - (void)viewDidLoad
 2 {
 3     [super viewDidLoad];
 4     self.title = @"第三页";
 5     // Do any additional setup after loading the view from its nib.
 6
 7     //隐藏当前view的toolbar
 8     self.navigationController.toolbarHidden = YES;
 9
10     //设置toolbar
11     UIBarButtonItem *rightbar = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(goToRootView)] autorelease];
12
13     self.navigationItem.rightBarButtonItem = rightbar;
14
15    // NSArray *array = @[@"排骨", @"牛排"];
16
17     //设置titleview,会覆盖title
18     UISegmentedControl *segment = [[[UISegmentedControl alloc] initWithItems:@[@"排骨", @"牛扒"] ] autorelease];
19     segment.segmentedControlStyle = UISegmentedControlSegmentCenter;
20
21     self.navigationItem.titleView = segment;
22 }

效果如下:

barButtonItem的style及效果对应如下:

转自:http://www.cnblogs.com/zouzf/archive/2013/01/17/2864506.html

时间: 2024-08-13 07:59:28

IOS 学习 开发 自定义 UINavigationController 导航的相关文章

自定义UINavigationController(导航控制器)

首先,我先说说怎样自定义导航控制器. 1.自定义导航控制器需要新建一个类继承UINavigationController.如图: 2.在initialize方法中,自定义一些属于自己的navigationBar的一些东西.比如:颜色,文字,适配IOS7等等... /** * 初始化(每一个类只会调用一次) */ + (void)initialize { [UIColor colorWithRed:226/255.0 green:226/255.0 blue:226/255.0 alpha:1.0

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

IOS开发UI篇—导航控制器属性和基本使用 一.导航控制器的一些属性和基本使用 1.把子控制器添加到导航控制器中的四种方法 (1) 1.创建一个导航控制器 UINavigationController *nav=[[UINavigationControlleralloc]init]; 2.设置导航控制器为window的根视图 self.window.rootViewController=nav; 3.添加 YYOneViewController  *one = [[YYOneViewContro

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

1.RootView 跳到SecondView 首先我们需要新一个View.新建SecondView,按住Command键然后按N,弹出新建页面,我们新建SecondView 2.为Button 添加点击事件,实现跳转 在RootViewController.xib中和RootViewController.h文件建立连接 在RootViewController.m中实现代码,alloc一个SecondViewController,用pushViewController到navigationCon

IOS学习之斯坦福大学IOS开发课程笔记(第六课)

转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/28398697 作者:小马 这节课主要讲述多个MVC是如何协同工作的.到目前为止,所有的课程都只是涉及到一个视图.从这节课开始,将会持到多视图应用的例子. 多视图开发这里用navigationController举例子.这个也是比较常用的.如上图所示,一个 navigation Controller(MVC)会指向一个rootViewController(另一个MVC),这个是第一

iOS开发-自定义后台显示图片(iOS7-Background Fetch的应用)

之前在用电池医生的时候, 发现它有这样一个功能:当应用进入后台的时候, 会显示另外一张图片覆盖App Switcher显示的界面. 效果如下: 变成----> 而这样的一个功能, 对于保护用户隐私还是挺有用的. 这就涉及到了Background Fetch的使用.当然, Background Fetch有更多,更有用的功能, 详见-->iOS 7学习:多任务处理之Background Fetch 下面就介绍下后台图片切换的实现. 1.程序配置后台模式 操作如下: 2. AppDelegate.

iOS原生地图开发进阶——使用导航和附近兴趣点检索

iOS原生地图开发进阶——使用导航和附近兴趣点检索 iOS中的mapKit框架对国际化的支持非常出色.在前些篇博客中,对这个地图框架的基础用法和标注与覆盖物的添加进行了详细的介绍,这篇博客将介绍两个更加实用的功能的开发:线路导航与兴趣点搜索.前几篇博客的链接如下: 地图基础用法详解:http://my.oschina.net/u/2340880/blog/415360. 添加大头针与自定义标注:http://my.oschina.net/u/2340880/blog/415441. 添加地图覆盖

iOS 视频开发学习

原文:浅谈iOS视频开发 这段时间对视频开发进行了一些了解,在这里和大家分享一下我自己觉得学习步骤和资料,希望对那些对视频感兴趣的朋友有些帮助. 一.iOS系统自带播放器 要了解iOS视频开发,首先我们从系统自带的播放器说起,一.我们可以直接播放视频,看到效果,不然搞了半天还播放不了视频,会让大家失去兴趣.二.其实对于很多需求来说,系统的播放器就能够胜任.简单介绍下 1.MPMoviePlayerController 在iOS中播放视频可以使用MPMoviePlayerController类来完

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

转载地址:http://blog.csdn.net/totogo2010/article/details/7682433 iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem是上篇,我们接着讲UINavigationController的重要作用,页面的管理和切换. 1.RootView 跳到SecondView 首先我们需要新一个View.新建SecondView,按住Command键然后按N,弹出新建页面,我们新建SecondView 2

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

转载地址:http://blog.csdn.net/totogo2010/article/details/7681879 1.UINavigationController导航控制器如何使用 UINavigationController可以翻译为导航控制器,在iOS里经常用到. 我们看看它的如何使用: 下面的图显示了导航控制器的流程.最左侧是根视图,当用户点击其中的General项时 ,General视图会滑入屏幕:当用户继续点击Auto-Lock项时,Auto-Lock视图将滑入屏幕.相应地,在