[iOS基础控件 - 6.11.2] - UINavigationController 多控制器 简单使用
- UINavigationController
- UITabBarController
初始化UINavigationController
设置UIWindow的rootViewController为UINavigationController
1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
2 // 设置window
3 self.window = [[UIWindow alloc] init];
4 self.window.frame = [[UIScreen mainScreen] bounds];
5 self.window.backgroundColor = [UIColor grayColor]; // window是灰色背景
6 [self.window makeKeyAndVisible];
7
8
9 // 设置UINavigationController
10 UINavigationController *nvController = [[UINavigationController alloc] init];
11 nvController.view.backgroundColor = [UIColor blueColor]; // 设置蓝色背景
12 self.window.rootViewController = nvController;
13
14 return YES;
15 }

1 // 配置第一个子控制器
2 ViewControllerOne *vc1 = [[ViewControllerOne alloc] init];
3 [nvController pushViewController:vc1 animated:YES];
4
5 // 配置第二个子控制器
6 ViewControllerTwo *vc2 = [[ViewControllerTwo alloc] init];
7 [nvController pushViewController:vc2 animated:YES];
8
9 // 配置第三个子控制器,这是栈顶的控制器
10 ViewControllerThree *vc3 = [[ViewControllerThree alloc] init];
11 [nvController pushViewController:vc3 animated:YES];

1 - (void)applicationDidBecomeActive:(UIApplication *)application {
2 // 必须在加载完毕激活app后,所有的view的尺寸位置才能确定
3 UINavigationController *nvController = (UINavigationController *)self.window.rootViewController;
4 NSLog(@"%@", NSStringFromCGRect(nvController.view.frame)); // 整个导航控制器的frame
5 NSLog(@"%@", NSStringFromCGRect(nvController.navigationBar.frame)); // 导航条的frame
6 }
7
1 @property(nonatomic,copy) NSArray *viewControllers; // The current view controller stack.
1 - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated; // Uses a horizontal slide transition. Has no effect if the view controller is already in the stack.
1 // 配置第一个子控制器
2 ViewControllerOne *vc1 = [[ViewControllerOne alloc] init];
3 [nvController pushViewController:vc1 animated:YES];
- UINavigationController中的”viewControllers"成员是一个数组,就是子控制器栈
- "childViewControllers"的功能也是一样的(这是UIViewController的成员属性)
- "addChildController"和"pushViewController"的功能一样(这是UIViewController的方法)
1 ViewControllerOne *vc1 = [[ViewControllerOne alloc] init];
2 [nvController addChildViewController:vc1];
1 // 配置第一个子控制器
2 ViewControllerOne *vc1 = [[ViewControllerOne alloc] init];
3 nvController.viewControllers = @[vc1];
1 // 传入一个viewController作为 nvController的 rootViewController
2 nvController = [[UINavigationController alloc] initWithRootViewController:vc1];

1 - (IBAction)goToThree {
2 // 配置第三个子控制器
3 ViewControllerThree *vc3 = [[ViewControllerThree alloc] init];
4 [self.navigationController pushViewController:vc3 animated:YES];
5 }
6
7 - (IBAction)gotoFour {
8 // 配置第四个子控制器
9 ViewControllerFour *vc4 = [[ViewControllerFour alloc] init];
10 [self.navigationController pushViewController:vc4 animated:YES];
11 }
1 // 这里是第三个,要回到第二个
2 - (IBAction)backtoTwo {
3 [self.navigationController popViewControllerAnimated:YES];
4 }
1 // 现在是第三个控制器的view,要回到第一个控制器的view
2 - (IBAction)backtoOne {
3 // 其实这里拿不到第一个控制器vc1的引用
4 // [self.navigationController popToViewController:vc1 animated:YES];
5
6 // 直接弹出,直到导航器的rootViewController,就是第一个子控制器vc1了
7 [self.navigationController popToRootViewControllerAnimated:YES];
8 }
1 @property(nonatomic,copy) NSString *title; // Localized title for use by a parent controller.
1 - (void)viewDidLoad {
2 [super viewDidLoad];
3 self.navigationItem.title = @"第一个view";
4 }

1 - (void)viewDidLoad {
2 [super viewDidLoad];
3 self.navigationItem.title = @"第二个控制器";
4
5 // 设置左上角的item
6 self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"我要回去" style:UIBarButtonItemStylePlain target:nil action:nil];
7
8 // 设置右上角的item
9 // 使用bar按钮
10 UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:nil action:nil];
11
12 // 使用自定义view
13 UIBarButtonItem *item2 = [[UIBarButtonItem alloc] initWithCustomView:[UIButton buttonWithType:UIButtonTypeContactAdd]];
14
15 // 这是这是从右到左排列显示
16 self.navigationItem.rightBarButtonItems = @[item1,item2];
17 }



1 // 第二个控制器
2 - (void)viewDidLoad {
3 [super viewDidLoad];
4 ...
5 // 设置第二个控制器的“返回”样式
6 self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"速速回2" style:UIBarButtonItemStylePlain target:nil action:nil];
7 }

1 - (void)applicationDidBecomeActive:(UIApplication *)application {
2 // 必须在加载完毕激活app后,所有的view的尺寸位置才能确定
3 UINavigationController *nvController = (UINavigationController *)self.window.rootViewController;
4 NSLog(@"%@", NSStringFromCGRect(nvController.view.frame)); // 整个导航控制器的frame
5 NSLog(@"%@", NSStringFromCGRect(nvController.navigationBar.frame)); // 导航条的frame
6 }
最后的点击链接图:













[iOS基础控件 - 6.11.2] - UINavigationController 多控制器 简单使用的更多相关文章
- [iOS基础控件 - 6.11.3] 私人通讯录Demo 控制器的数据传递、存储
A.需求 1.搭建一个"私人通讯录"Demo 2.模拟登陆界面 账号 密码 记住密码开关 自动登陆开关 登陆按钮 3.退出注销 4.增删改查 5.恢复数据(取消修改) 这个代码 ...
- [iOS基础控件 - 6.11.4] storyboard 的 Segue
A.概念 storyboard中的跳转事件连线,都是一个UIStoryboardSegue对象(Segue) 来源控制器 触发控制器 目标控制器 跳转到的控制器 Seg ...
- [iOS基础控件 - 6.11.5] 沙盒 & 数据存储
A.沙盒 每个APP都有一个沙盒,是独立存在的 1.Xcode5和Xcode6的模拟器文件目录 a.模拟器路径改版 (1)Xcode5中模拟器路径为:/Users/用户名/Library/Appl ...
- [iOS基础控件 - 6.11.1] - 控制器 & 控制器view
A.控制器的创建 控制器常见的创建方式有以下几种通过storyboard创建 直接创建 ViewController *vc = [[ViewController alloc] init]; ...
- [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)
A.概述 在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能 1.按钮点击后,显示为“已下载”,并且不 ...
- [iOS基础控件 - 6.12.1] QQ菜单管理 UITabBarController 控制器管理
A.需求 1.类似QQ.微信顶部或者底部的窗口转换导航条 2.给每个页面添加相应内容 B.UITabBarController 1.基本概念: (1)内容高度 iOS7之前内容高度为:屏幕高度 - ...
- iOS 基础控件(下)
上篇介绍了UIButton.UILabel.UIImageView和UITextField,这篇就简短一点介绍UIScrollView和UIAlertView. UIScrollView 顾名思义也知 ...
- [iOS基础控件 - 7.0] UIWebView
A.基本使用 1.概念 iOS内置的浏览器控件 Safari浏览器就是通过UIWebView实现的 2.用途:制作简易浏览器 (1)基本请求 创建请求 加载请求 (2)代理监听webView加载, ...
- [iOS基础控件 - 6.10.2] PickerView 自定义row内容 国家选择Demo
A.需求 1.自定义一个UIView和xib,包含国家名和国旗显示 2.学习row的重用 B.实现步骤 1.准备plist文件和国旗图片 2.创建模型 // // Flag.h // Co ...
随机推荐
- Android开发之LocationManager和定位
代码: /* * 获取当前的位置,并通过短信发送位置到指定号码 */ public class LocationService extends Service { private LocationMa ...
- [HDOJ1827]Summer Holiday(强连通分量,缩点)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1827 缩点后统计入度和当前强连通分量中最小花费,然后记录入度为0的点的个数和花费和就行了. /* ━━ ...
- Bitset小结 (POJ2443 & HDU4920)
学了下bitset用法,从网上找的一些bitset用法,并从中调出一些常用的用法. 构造函数bitset<n> b; b有n位,每位都为0.参数n可以为一个表达式.如bitset<5 ...
- POJ3485 区间问题
题目描述有些坑.. 题意: 有一条高速公路在x轴上,从(0,0)到(L,0).周围有一些村庄,希望能够在高速公路上开通几个出口,使得每个村庄到最近的出口距离小于D,求出最少需要开通多少个出口. 解题思 ...
- UVa 11178 (简单练习) Morley's Theorem
题意: Morley定理:任意三角形中,每个角的三等分线,相交出来的三个点构成一个正三角形. 不过这和题目关系不大,题目所求是正三角形的三个点的坐标,保留6位小数. 分析: 由于对称性,求出D点,EF ...
- bzoj1355: [Baltic2009]Radio Transmission
将原串看成是循环节的后缀加上若干个循环节,那么考虑每种情况都会发现n-next[n]就是最小循环节.(一开始总输出n...然后发现build_next连调用都没有,%%% #include<cs ...
- 【 D3.js 高级系列 — 8.0 】 标线
有时候,需要在地图上绘制连线,表示"从某处到某处"的意思,这种时候在地图上绘制的连线,称为"标线". 1. 标线是什么 标线,是指地图上需要两个坐标以上才能表示 ...
- 【转】让 cocos2d-x 的 CCHttpRequest 支持https
肖锐(Cooki)个人原创,欢迎转载,转载请注明地址,肖锐(Cooki)的技术博客 http://blog.csdn.net/xiao0026 由于游戏用到了网络头像, 今天发现换成facebook ...
- css的伪元素
这里想将的是两个伪元素,一个是:first-line——用来向文本的首行添加特殊样式,并且不论该行出现多少单词:只能与块状元素关联. 如下属性可以应用于:first-line伪元素 font属性 co ...
- ADO.NET访问SQL Server调用存储过程带回参
1,ADO.NET访问SQL Server调用存储过程带回参 2,DatabaseDesign use northwind go --存储过程1 --插入一条商品 productname=芹菜 un ...