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 学习路线总结
学习方法 面对有难度的功能,不要忙着拒绝,而是挑战一下,学习更多知识. 尽量独立解决问题,而不是在遇到问题的第一想法是找人. 多学习别人开源的第三方库,能够开源的库一定有值得学习的地方,多去看别的大神 ...
随机推荐
- sql server分页
表结构 CREATE TABLE v_home ( vid int IDENTITY(1,1) not null,-- AUTO_INCREMENT, chapter varchar(20) not ...
- swing 复选框
通过 box1 和 box2的 public boolean isSelected()的方法 返回按钮的状态. 如果选定了切换按钮,则返回 true,否则返回 false.
- chrome浏览器设置小于12号的字体不起作用?
在某些chrome浏览器下,css里设置的10号字体竟然不起作用!仍显示12号大小,对比firefox.ie6.7.8.9,他们的显示都是好的. 要是你也碰到这问题,可以这样解决: -webkit-t ...
- 八、Linux下的网络服务器模型
服务器设计技术有很多,按使用的协议来分有TCP服务器和UDP服务器,按处理方式来分有循环服务器和并发服务器. 在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求,对服务端的程序就提 ...
- 【C++面试】常考题复习
// CPP_Test@2014.10.22.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <assert.h&g ...
- 【ILSpy反编译】C# 写的程序反编译查看是不是也太容易了点吧,太恐怖了。。。
最近由于要写一些界面的东西,写了几个月c#(之前一直做c/c++项目),发现c#写界面很方便,效果也不错,在这个过程中也听说c#程序可以很容易被反编译到,但一直也没时间去自己反编译去试着看看,心想就算 ...
- WeChat 6.3 wipe deleted chat messages as well as LINE 5.3 and above
Let me show you the WeChat version first. It is 6.3. What will happen to WeChat deleted chat message ...
- 解决win 7&win xp等系统无法正常用U盘安装或启动
目前,制作启动U盘通常是用ultraiso,但由于各种硬件设备与系统的更新,导致现在装系统会出现各种错误. 在用ultraiso制作的启动U盘,装XP时,可能找不到引导项:装win7时,可能提示”wi ...
- Android事件
1.Java package com.fish.helloworld; import android.app.Activity; import android.graphics.Color; impo ...
- trap在shell中捕捉信号
一.trap捕捉到信号之后,可以有三种反应方式:(1)执行一段程序来处理这一信号(2)接受信号的默认操作(3)忽视这一信号 二.trap对上面三种方式提供了三种基本形式:第一种形式的trap命令在sh ...