iOS学习之UINavigationController
- 任何继承自UIViewController的类(多态)都可以作为根控制器。
// 创建UIWindow对象 self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; // 设置背景颜色 self.window.backgroundColor = [UIColor whiteColor]; // 使window显示 [self.window makeKeyAndVisible]; // 创建视图控制器,给window指定根控制器,设置导航控制器 self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[[RootViewController alloc] init]];
- UINavigationBar(导航栏)上的设置主要分两部分,一为导航栏上的各种导航部件(UINavigationItem),二为导航栏自身的相关设置。
- navigationBar——导航条,iOS7之后默认是半透明的,iOS7之前默认是不透明的。
- navigationBar竖屏下默认高度44,横屏下默认高度32。
- iOS7之后,navigationBar的背景会延伸到statusBar上。导航栏高度仍保持44,但显示效果为64.
- 每个视图控制器都有一个navigationItem属性。navigationItem中设置的左按钮、右按钮、标题等,会随着控制器的显示,也显示到navigationBar上。
#import "RootViewController.h" @interface RootViewController () @end @implementation RootViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.view.backgroundColor = [UIColor brownColor]; // 设置导航控制器 [self initLayout]; } // 初始化布局(实现布局的方法) - (void)initLayout { // 导航控制器的显示隐藏属性(YES == 隐藏, NO == 显示) self.navigationController.navigationBarHidden = NO; // UINavigationBar(导航条,iOS7.0 之后导航条默认有半透明属性) // 设置导航条是否开启半透明效果(会影响self.subViews的坐标系,当半透明效果开启时,self.view以屏幕左上角为坐标原点,关闭时,导航条左下角为坐标原点) self.navigationController.navigationBar.translucent = NO; // 修改导航条颜色,状态栏颜色默认与导航条颜色相同 self.navigationController.navigationBar.barTintColor = [UIColor grayColor]; // 导航条背景颜色 self.navigationController.navigationBar.backgroundColor = [UIColor redColor]; // 设置导航条标题 // self.title = @"根视图"; // navigationItem属性,用来设置子控件 self.navigationItem.title = @"根视图"; // 左按钮 self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"左按钮" style:UIBarButtonItemStylePlain target:self action:@selector(leftItemAciton:)]; // 右按钮 // 一个按钮 // self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(rightItemClick:)]; // // self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"next"] style:UIBarButtonItemStylePlain target:self action:@selector(rightItemClick:)]; // 多个按钮, 自动排序 UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(rightItemClick:)]; UIBarButtonItem *item2 =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemReply target:self action:@selector(rightItemClick:)]; self.navigationItem.rightBarButtonItems = @[item2, item1]; // 设置导航元素的颜色 self.navigationController.navigationBar.tintColor = [UIColor whiteColor]; // 导航栏样式 self.navigationController.navigationBar.barStyle = UIBarStyleBlack; // 标题视图 UISegmentedControl *segment = [[UISegmentedControl alloc] initWithItems:@[@"男神", @"女神", @"-1"]]; segment.frame = CGRectMake(, , , ); segment.selectedSegmentIndex = ; [segment addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged]; self.navigationItem.titleView = segment; UIView *view = [[UIView alloc] initWithFrame:CGRectMake(, , , )]; view.backgroundColor = [UIColor lightGrayColor]; [self.view addSubview:view]; } // 实现左按钮方法 - (void)leftItemAciton:(UIBarButtonItem *)sender { NSLog(@"跟着我左手 慢动作"); } - (void)segmentAction:(UISegmentedControl *)sender { switch (sender.selectedSegmentIndex) { : self.view.backgroundColor = [UIColor colorWithRed: green: blue: alpha:]; break; : self.view.backgroundColor = [UIColor colorWithRed: green: blue: alpha:]; break; : self.view.backgroundColor = [UIColor colorWithRed: green: blue: alpha:]; break; default: break; } } // 实现右按钮方法 - (void)rightItemClick:(UIBarButtonItem *)sender { NSLog(@"跟着我右手 慢动作重播"); } @end
- UINavigationController通过栈的方式管理控制器的切换,控制入栈和出栈来展示各个视图控制器。
- UINavigationController的ContentView里始终显示栈顶控制器的view。
- viewControllers属性是一个可变数组(NSMutableArray)存储了栈中说的所有被管理的控制器,入栈的时候,使用addObject把新的视图控制器对象添加到数组末尾,出栈时removeLastObject移除数组末尾的视图控制器对象。
- navigationController属性,父类中的属性,每个栈中的控制器,都能通过此属性,获取自己所在的UINavigationController对象。
- 栈的特点:先进后出,后进先出。
// 实现按钮方法 - (void)btnAction:(UIButton *)sender { // 创建第一页的对象 FirstViewController *fVC = [[FirstViewController alloc] init]; // 通过导航控制器推出新的页面 [self.navigationController pushViewController:fVC animated:YES]; }
- (void)popButtonAction:(UIButton *)sender { // 返回上一个视图 [self.navigationController popViewControllerAnimated:YES]; // 返回指定视图 [self.navigationController popToViewController:self.navigationController.viewControllers[] animated:YES]; // 返回根视图 [self.navigationController popToRootViewControllerAnimated:YES]; }
- 页面的切换方式主要分为:推出(push)和模态(present)。
- 推出用于一系列的视图之间的跳转有层次递进关系。
- 模态用于单独功能页面的跳转和主要业务逻辑没有关联(登录,歌曲播放页,系统相册,应用中调出系统功能)。
- (void)modelBtnAction:(UIButton *)sender { // 创建第二页对象 ShowViewController *sVC = [[ShowViewController alloc] init]; // 给第二页设置导航控制器 UINavigationController *sNVC = [[UINavigationController alloc] initWithRootViewController:sVC]; // 添加模态动画 sVC.modalTransitionStyle = UIModalTransitionStyleCoverVertical; // 模态跳到下一个页面 [self.navigationController presentViewController:sNVC animated:YES completion:nil]; }
- (void)backBtnAction:(UIButton *)sender { // 模态返回上一个视图 [self dismissViewControllerAnimated:YES completion:nil]; }
// 模态动画的效果// UIModalTransitionStylePartialCurl 翻页方式 推出 // UIModalTransitionStyleFlipHorizontal 水平旋转方式 推出 // UIModalTransitionStyleCrossDissolve 交叉叠化溶解方式 推出 // UIModalTransitionStyleCoverVertical 垂直覆盖方式 推出
iOS学习之UINavigationController的更多相关文章
- iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem
http://blog.csdn.net/totogo2010/article/details/7681879 1.UINavigationController导航控制器如何使用 UINavigati ...
- [转]iOS学习之UINavigationController详解与使用(三)ToolBar
转载地址:http://blog.csdn.net/totogo2010/article/details/7682641 iOS学习之UINavigationController详解与使用(二)页面切 ...
- [转]iOS学习之UINavigationController详解与使用(二)页面切换和segmentedController
转载地址:http://blog.csdn.net/totogo2010/article/details/7682433 iOS学习之UINavigationController详解与使用(一)添加U ...
- iOS学习之UINavigationController详解与使用(三)ToolBar
1.显示Toolbar 在RootViewController.m的- (void)viewDidLoad方法中添加代码,这样Toobar就显示出来了. [cpp] view plaincopy [ ...
- iOS学习之UINavigationController详解与使用(二)页面切换和segmentedController
iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem是上篇,我们接着讲UINavigationController的重要作用,页面的管理和切换. ...
- iOS学习心得——UINavigationController
UINavigationController和UItableviewController一样也是iOS开发中常用的控件之一,今天就来学习一下它的常见用法. 有人说tab ...
- [转]iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem
转载地址:http://blog.csdn.net/totogo2010/article/details/7681879 1.UINavigationController导航控制器如何使用 UINav ...
- 2015最新iOS学习线路图
iOS是由苹果公司开发的移动操作系统,以xcode为主要开发工具,具有简单易用的界面.令人惊叹的功能,以及超强的稳定性,已经成为iPhone.iPad 和iPod touch 的强大基础:iOS 内置 ...
- ios 学习路线总结
学习方法 面对有难度的功能,不要忙着拒绝,而是挑战一下,学习更多知识. 尽量独立解决问题,而不是在遇到问题的第一想法是找人. 多学习别人开源的第三方库,能够开源的库一定有值得学习的地方,多去看别的大神 ...
随机推荐
- Android基础总结(3)——UI界面布局
Android的UI设计有好几种界面程序编写方式.大体上可分为两大类:一类是利用可视化工具来进行,允许你进行拖拽控件来进行布局:还有一类是编写xml文档来进行布局.这两种方法可以相互转换. 1.常见的 ...
- JS常用的设计模式(13)——组合模式
组合模式又叫部分-整体模式,它将所有对象组合成树形结构.使得用户只需要操作最上层的接口,就可以对所有成员做相同的操作. 一个再好不过的例子就是jquery对象,大家都知道1个jquery对象其实是一组 ...
- 关于OJ上内存问题的试验
char类型占一个字节 int类型占4个字节 如果杭电OJ上给的范围是32678K,那么内存大小就是32678*1024=33554432 那么可以开到多大的数组呢?!可以开到很大,但是可用的就只有3 ...
- 判断字符串是否包含字母‘k’或者‘K’
判断字符串是否包含字母‘k’或者‘K’ public bool IsIncludeK(string temp) { temp = temp.ToLower(); if (temp.Contains(' ...
- SQL SERVER基础语句
1.增加字段名 ALTER TABLE [表名] ADD [列名] VARCHAR(20) NULL VARCHAR(20)是新加字段的类型和长度NUll:表示允许NULL值 3.修改字段类型 A ...
- LogStash 中字段的排除和数据的排除
排除字段 字段的排除需要在filter中进行操作,使用一个叫做 mutate 的工具,具体操作如下 由于这个工具的名字不是很容易联想到,也是找了好一会. //比如我们可能需要避免日志中kafka的一些 ...
- Linux服务器的初步配置流程
作者: 阮一峰 日期: 2014年3月14日 开发网站的时候,常常需要自己配置Linux服务器. 本文记录配置Linux服务器的初步流程,也就是系统安装完成后,下一步要做的事情.这主要是我自己的总结和 ...
- 直接拿来用!超实用的Java数组技巧攻略[转]
来自csdn http://www.csdn.net/article/2013-09-16/2816947-methods-for-java-arrays 本文分享了关于Java数组最顶级的11大方法 ...
- C++列出完数
题目内容:自然数中,完数寥若晨星,请在从1到某个整数范围中打印出所有的完数来.所谓“完数”是指一个数恰好等于它的所有不同因子之和.例如,6是完数,因为6=1+2+3.而24不是完数,因为24≠1+2+ ...
- 苹果Mac OS系统shell命令大全介绍
基本命令 1.列出文件 ls 参数 目录名 例: 看看驱动目录下有什么:ls /System/Library/Extensions 参数 -w 显示中文,-l 详细信息, -a 包括隐藏 ...