第06章 多视图应用程序

6.1 多视图应用程序的常见类型

视图术语,通常指具有相应视图控制器的UIView或其子类,这些视图类型也称为内容视图。

常见的多视图类型有:

基于标签栏的应用程序 UITabBarController

基于导航栏的应用程序 UINavigationController

在ipad上,大部分基于导航的应用程序使用分割视图 split view

注意区分工具栏和标签栏,工具栏仅仅是底部放置了一系列工具控件的控件而已。

?

6.2 多视图应用程序的体系结构

根控制器:应用程序的主视图控制器,它负责管理当前向用户显示哪个视图。

这个根控制器通常是UINavigationController或UITabBarController或者其他自定义UIViewController

内容视图:每个内容视图至多由三部分组成,控制器,nib文件,UIView子类;

每个视图控制器控制着一个内容视图。

6.3 UINavigationController

使用Empty Application模版创建应用程序,这个模版提供了一个应用程序委托,其中有个UIWindow属性。

注意,每个应用程序仅拥有一个属于它的窗口。

1.创建控制器

创建根视图控制器 BIDSwitchViewController,不自动创建xib文件

创建两个内容视图控制器BIDBlueViewController,BIDYellowViewController

都不自动创建xib,后面手动创建,手动关联,是为了更好的理解controller和xib的关联

2.创建xib文件

command+n, 选中user interface, 选择view模版,这将创建一个带由内容视图的xib文件

名称为SwitchView.xib, BlueView.xib,  YellowView.xib

3.修改应用程序委托

使用SwitchView.xib初始化BIDSwitchViewContrller,并且设置其为应用程序委托窗口的根视图控制器。

self.switchViewController = [[BIDSwitchViewController alloc]

initWithNibName:@"SwitchView" bundle:nil];

self.window.rootViewController = self.switchViewController;

4.在根视图控制器中,添加内容视图

//  BIDSwitchViewController.h

@property (strong, nonatomic) BIDYellowViewController *yellowViewController;

@property (strong, nonatomic) BIDBlueViewController *blueViewController;

5.修改手动创建的xib文件

手动创建的xib文件,起初不知道其File’s Owner的具体类型,所以需要设置

command+option+3 打开身份检查器,修改其File‘s Owner类型为 BIDSwitchViewController

UIViewController中有个view输出口,修改了xib文件的拥有者类型后,还需要将控制器的view输出口关联到xib文件的View。

之所以创建xib文件的时候其内部不自动关联,是因为其File‘s Owner默认类型为NSObject,无view输出口

6.构建带有工具栏的视图

从对象库中,拖出一个Toolbar,放置到view底部,并关联其按钮的动作方法switchViews

(现在应该搞清楚了,toolbar只是一个控件类型,而标签栏是一个可以容纳不同视图的视图控制器)

7.修改根视图控制器

- (void)viewDidLoad

{

[super viewDidLoad];

if (self.blueViewController == nil) {

self.blueViewController = [[BlueViewController alloc] initWithNibName:@"BlueViewController" bundle:nil];

}

if (self.yellowViewController == nil) {

self.yellowViewController = [[YellowViewController alloc] initWithNibName:@"YellowViewController" bundle:nil];

}

//起初显出蓝色视图

[self.view insertSubview:self.blueViewController.view atIndex: 0];

}

//切换视图

- (IBAction)switchViews:(UIBarButtonItem *)sender

{

if (self.yellowViewController.view.superview == nil) {

//注意,移出父视图,是通过自己

[self.blueViewController.view removeFromSuperview];

//插入父视图,是通过父视图add

[self.view insertSubview:self.yellowViewController.view atIndex:0];

}else {

[self.yellowViewController.view removeFromSuperview];

[self.view insertSubview:self.blueViewController.view atIndex:0];

}

}

注意,视图insertSubview:atIndex并且插入到0的位置,意思是将其放在其他所有子视之后,作为背景视图

避免遮住了前面创建的工具栏子视图。

8.实现内容视图

添加button,添加action方法

注意,虽然是简单的view切换,但是每个view视图,都是由一个视图控制器所拥有的。

9.视图转换过程的动画效果

UIView中,有几个类方法用于制定视图转换过程中,是否使用动画效果,指定转换类型和转换过程的持续时间。

为了告诉IOS,我们希望在转换过程中使用动画效果,需要声明一个动画块,并指定动画持续的时间。

beginAnimations:context:

第一个参数,动画块标题

第二个参数是一个void*指针

比如:

[UIView beginAnimations:@"Flip View" context:nil];//设置动画块标题

[UIView setAnimationDuration:1.25];//设置持续时间

[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];//设置动画曲线

应该始终对动画进行缓存,除非视图外观在动画执行过程中需要改变

//设置转换类型

[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];

//…视图转换

。。。

//合成动画

[UIView commitAnimations];

从beginAnimations开始到最后commitAnimations之间的所有动作,都会被制成动画。

总结:

initWithNibName

insertSubview

removeFromSuperview

时间: 2024-10-05 11:10:09

第06章 多视图应用程序的相关文章

<<Python基础教程>>学习笔记 | 第06章 | 抽象

第06章  抽象 ------ 懒惰即美德 假如要计算斐波那契数列(任何一个数是前两数之和的数字序列) >>> fibs=[0,1] >>> for i in range(8): fibs.append(fibs[-2]+fibs[-1]) #fibs[-2]+fibs[-1]后两位数,append往后添加 #运行后,包含10个斐波那契数列的10个数字是 >>> fibs [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] 如果允许用户

第06章-图像处理及可视化(1)

[译者:这个系列教程是以Kitware公司出版的<VTK User's Guide -11th edition>一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934-23-8),由于时间关系,我们不能保证每周都能更新本书内容,但尽量做到一周更新一篇到两篇内容.敬请期待^_^.欢迎转载,另请转载时注明本文出处,谢谢合作!同时,由于译者水平有限,出错之处在所难免,欢迎指出订正!] [本节对应原书中的第119页至第125页] 第6章图像处理及可视化 图像数据,如图6-1所示,在

【Anroid】第9章 列表视图(1)--ListView相关类及其适配器

分类:C#.Android.VS2015: 创建日期:2016-02-18 一.简介 列表视图(ListView)是Android应用程序中使用最频繁的UI组件,从无处不在短菜单选项列表到冗长的联系人或internet收藏夹列表--都会用它来实现. ListView控件的用法非常灵活,既可以使用内置的视图呈现基本的样式,也可以用自定义视图呈现各种特殊的视觉效果. 要完全掌握Android提供的ListView控件的用法,需要解决下面的问题: (1)如何用Android内置的视图呈现列表视图中的每

8.MFC多文档视图构架程序

一.多文档视图构架程序 1.相关问题 可以同时管理多个文档(可以有多个文档类对象) 2.相关类 CWinApp / CDocument / CView / CMIDChildWnd / CMIDFrameWnd CDocTemplate CMultiDocTemplate - 多文档模板类 CDocManager - 文档管理类

第2章 Python如何运行程序

第2章 Python如何运行程序 ? 本章和下一章将快速地看一看程序的执行--你如何启动代码,以及Python如何运行它.在这一章中,我们将大体上研究一下Python解释器如何执行程序.之后的第3章将向你展示如何建立你自己的程序并运行它. ? 程序的启动细节天生就与特定的平台相关,这两章的部分内容可能并不适用于你工作的平台,所以高级读者应当随心所欲地跳过与他们预期的用途不相关的部分.同样,以往使用过类似的工具并且期望对语言快速进阶的读者可能想把这两章的部分内容束之高阁"以备日后参考".

第11章 mysql 视图

2015-10-24 目录 参考资料 [1] 唐汉明.深入浅出MySQL 数据库开发.优化与管理维护(第2版)[M].北京:人民邮电出版社,2014 [2] Schwartz.高性能MySQL(第3版)[M].北京:电子工业出版社,2013 [3] 范德兰斯.MySQL开发者SQL权威指南 [M].北京:机械工业出版社,2008 [4] Forta.MySQL必知必会 [M].北京:人民邮电出版社,2009 [5] mysql视图学习总结 [6] mysql之视图 [7] mysql之视图详解

第5章 用函数封装程序功能

第5章 用函数封装程序功能 5.1 函数就是一个大"箱子" 5.1.1 函数的声明和定义 5.1.2 函数调用机制 5.1.3 函数的声明与函数调用 5.1.4 函数参数的传递 5.1.5 函数的返回值 5.2 内联函数 5.2.1 用体积换速度的内联函数 5.2.2 内联函数的使用规则 5.3 重载函数 5.3.1 重载函数的声明 5.3.2 重载函数的解析 5.4 函数设计的基本规则 5.4.1 函数声明的设计规则 5.4.2 函数体的设计规则 TOP

【Oracle】第三章索引视图序列

第三章索引视图序列 序列是用来生成唯一,连续的整数的数据库对象.序列是用来自动生成主键或唯一键的值. CREATE SEQUENCE  sequence_name START WITH  integer INCREMENT BY  integer MAXVALUE   integer|nomaxvalue MINVALUE    integer|nominvalue CYCLE|NOCYCLE CACHE  integer|nocache; START WITH     指要生成的第一个序列号,

Prism 文档 第二章 初始化Prism应用程序

                                                                       第二章 初始化Prism应用程序 本章将讨论为了使一个Prism应用程序的启动和运行哪些是必须的.Prism的应用程序在启动过程中需要注册和配置,这被称为引导应用程序. 什么是Bootstrapper? bootstrapper是一个类,通过Prism类库负责一个应用程序建立的初始化.通过使用bootstrapper,对于如何将Prism库组件连接到您的应