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 学习路线总结
学习方法 面对有难度的功能,不要忙着拒绝,而是挑战一下,学习更多知识. 尽量独立解决问题,而不是在遇到问题的第一想法是找人. 多学习别人开源的第三方库,能够开源的库一定有值得学习的地方,多去看别的大神 ...
随机推荐
- yii中modules的命名规则
如上图,views下面的文件夹名全小写(否则会出现找不到相应视图的错误),Module文件名称第一个单词首字母大写. 总之,按照上面的格式就不会有错了~
- C#中如何判断联系电话的合法性
string tel = tb_tel.Text.Trim();//联系电话if (!string.IsNullOrEmpty(tb_tel.Text.Trim())){try{//num = Con ...
- com组件 智能指针崩溃问题崩溃问题
int main(){ CoInitialize(NULL); HRESULT hr; IWinHttpRequestPtr pHttpReq=NULL; pHttpReq.CreateInstanc ...
- MyEclipse简单设置
1.设置 安装完MyEclipse后,先设置工作空间的编码. Window—preferences—General--workspace—选择UTF-8编码 创建HTML的文件后,如果不是UTF- ...
- CSS常用布局整理(二)
1-2-1单列变宽布局 side列定宽300px,content列变宽,尺寸是100%-300px.核心的问题就是浮动列的宽度应该等于“100% - 300px”,而CSS显然不支持这种带有减法运算的 ...
- Oracle:安装中的注意事项
导读:Oracle数据库的安装,姑娘我也是醉了.从开发今日开讲后台系统前,我就一直在装,第一版都开发完了,我昨天静下心来,才终于装上.在这个过程中,出现了好些个问题,说起来都是泪呀.现在就总结总结这个 ...
- md5的一些用法
package md5; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /* * ...
- JS产生四位随机数的方法
<script>var charactors="1234567890"; var value='',i; for(j=1;j<=4;j++){ i = parse ...
- Android 弹出框
1.Java package com.fish.helloworld; import android.app.Activity; import android.app.AlertDialog; imp ...
- Unable to write inside TEMP environment path
安装PostgreSQL 9:Unable to write inside TEMP environment path 注册表:regedit HKEY_CLASSES_ROOT\.vbs,设置默认为 ...