UI -- 多视图应用程序总结

来源:互联网 发布:软件项目估计 编辑:程序博客网 时间:2024/05/16 03:43

IOS之多视图应用程序

4.1 多视图应用程序介绍

4.2 UIViewController多视图程序

4.3 标签栏控制器

4.4 导航视图控制器应用

4.5 iOS应用程序风格类型

4.1 多视图应用程序介绍

iOS的很多应用程序都是采用多视图设计。控制器类型4种多视图程序:

"  自定义视图控制器

"  标签栏控制器

"  导航控制器

"  表视图控制器

视图和控制器类图

wps_clip_image-19247

定义视图控制器

直接继承了UIViewController类视图控制器,或者由UIViewController作为根控制器。

wps_clip_image-25821

标签栏控制器

由UITabBarController类作为根视图控制器。

wps_clip_image-13588

导航视图控制器

由UINavigationController类作为根视图控制器。

wps_clip_image-30551

表视图控制器

由UITableViewController类为根视图控制器。

wps_clip_image-14280

模态(Modal)视图控制器

模态视图控制器非根控制器方式,可以是上面提供的几种控制器,它能够帮助展示用户信息。

wps_clip_image-16630

4.2 UIViewController多视图程序

在iOS中我们是通过一个根视图控制器来,控制其他的视图控制器,其它的视图控制器在加载视图并显示。这里的根视图控制器是采用UIViewController类型。

wps_clip_image-25945

1 编写根视图控制器

创建一个基于视图的应用程序(MutilViewSwitch),将自动产生的视图控制器作为,我们的根视图控制器。

IB工具设计根视图,为根视图添加工具栏和按钮。

2 IB设计根视图

wps_clip_image-12554

3 增加BlueViewController

通过IB设计子视图,设置蓝色背景,并添加一个按钮。

BlueViewController.h

@interface BlueViewController : UIViewController {}-(IBAction)onClickButton:(id)sender;@end

 

BlueViewController.m

复制代码
@implementation BlueViewController-(IBAction)onClickButton:(id)sender {    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"系统消息"                                         message:@"蓝色视图"                                         delegate:self                                         cancelButtonTitle:@"Ok"                                         otherButtonTitles:nil];        [alert show];    [alert release];}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];}- (void)viewDidUnload {    [super viewDidUnload];}- (void)dealloc {    [super dealloc];}@end
复制代码

 

4 增加YellowViewController

复制代码
@interface YellowViewController : UIViewController {}-(IBAction)onClickButton:(id)sender;@end
复制代码

 

YellowViewController.m

复制代码
-(IBAction)onClickButton:(id)sender {    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"系统消息"                                                     message:@"黄色视图"                                                    delegate:self                                           cancelButtonTitle:@"Ok"                                           otherButtonTitles:nil];        [alert show];    [alert release];}
复制代码

 

5 根视图

根视图控制h文件

复制代码
#import "BlueViewController.h"#import "YellowViewController.h"@interface MutilViewSwitchViewController : UIViewController {    YellowViewController *yellowViewController;    BlueViewController *blueViewController;}@property (nonatomic, retain) YellowViewController *yellowViewController;@property (nonatomic, retain) BlueViewController *blueViewController;-(IBAction) switchViews:(id)sender;@end
复制代码

 

定义两个子视图控制器输出口,并定义一个是动作switchViews:用于切换视图时候调用。

根视图控制m文件

复制代码
@implementation MutilViewSwitchViewController@synthesize yellowViewController;@synthesize blueViewController;- (void)viewDidLoad {    BlueViewController *blueController = [[BlueViewController alloc]                                           initWithNibName:@"BlueViewController" bundle:nil];    self.blueViewController = blueController;    [self.view insertSubview:blueController.view atIndex:0];    [blueController release];    [super viewDidLoad];}- (void)dealloc {    [yellowViewController release];    [blueViewController release];    [super dealloc];}
复制代码

 

[[BlueViewController alloc] initWithNibName:@"BlueViewController" bundle:nil];

该方法可以通过nib文件创建一个视图控制器。

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

该语句是将蓝色视图插入当前根视图中,0是在将视图放在所有视图之后。

复制代码
-(IBAction) switchViews:(id)sender {        if (self.yellowViewController.view.superview == nil) {        if (self.yellowViewController.view == nil) {            YellowViewController *yellowController = [[YellowViewController alloc]                                                   initWithNibName:@"YellowViewController" bundle:nil];            self.yellowViewController = yellowController;            [yellowController release];        }        [blueViewController.view removeFromSuperview];        [self.view insertSubview:yellowViewController.view atIndex:0];    } else {        if (self.blueViewController.view == nil) {            BlueViewController *blueController = [[BlueViewController alloc]                                                       initWithNibName:@"BlueViewController" bundle:nil];            self.blueViewController = blueController;            [blueController release];        }        [yellowViewController.view removeFromSuperview];        [self.view insertSubview:blueViewController.view atIndex:0];    }    }
复制代码

 

self.yellowViewController.view.superview == nil

该语句为ture的情况有两种, 一个是yellowViewController没有实例化。

二是yellowViewController已经创建,但是 yellowViewController的视图没有添加到根视图中。

接下来通过self.yellowViewController.view == nil判断 yellowViewController是否实例化,如果没有实例化可以通 过initWithNibName:方法创建。

然后通过[blueViewController.view removeFromSuperview]从根视图中移除原来有 blueViewController的视图。再通过  [self.view insertSubview:yellowViewController.view atIndex:0]方法 将yellowViewController的视图添加到根视图上。

4.3 标签栏控制器

UITabBarController是TabBar(标签栏)控件的视图控制器,可以作为根控制器。

wps_clip_image-20541

wps_clip_image-6904

1 标签栏控制器原理

wps_clip_image-9209

2 创建一个TabBarApplication

3 添加视图控制器

增加两个文件:BlueViewController和YellowViewController

BlueViewCotroller.h和BlueViewCotroller.m

@interface BlueViewCotroller : UIViewController {}-(IBAction)onClickButton:(id)sender;@end

 

复制代码
-(IBAction)onClickButton:(id)sender {    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"系统消息"                                                     message:@"蓝色视图"                                                    delegate:self                                           cancelButtonTitle:@"Ok"                                           otherButtonTitles:nil];        [alert show];    [alert release];}
复制代码

 

YellowViewController.h和YellowViewController.m 

复制代码
//-h
@interface
YellowVieController : UIViewController {}-(IBAction)onClickButton:(id)sender;@end
//-m-(IBAction)onClickButton:(id)sender { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"系统消息" message:@"黄色视图" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; [alert release];}
复制代码

4 设计MainWindow.xib 

wps_clip_image-15265

5 设计YellowViewController.xib

wps_clip_image-10894

6 设计BlueViewController.xib 

wps_clip_image-6101

TabBar控制器在iOS中应用很多,TabBar控制器将其它的子视图控制器,放入到一个NSArray中,根据用户所在不同的TabBarItem找到对应的子视图控制器,由该视图控制器再加载对应的视图。

4.4 导航视图控制器应用

导航栏控制器是UINavigationController作为根控制器

wps_clip_image-2250

1 导航控制器原理

wps_clip_image-5824

导航控制器堆栈

wps_clip_image-26832

2 创建一个Navigation-Based  Application

工程创建完成后,已经具有了一个根视图控制器RootViewController它是UITableViewController控制器,一般情况下我们nav控制器应用程序都会与UITableViewController搭配,而RootViewController可以理解为“一级”(根视图)视图控制器,它包含了很多“二级”视图控制器,“二级”视图控制器一般也是UITableViewController类型,它又包含了多个“三级”视图控制器,而“三级”视图控制器是树的末梢,则一般是UIViewController。当然,如果应用只有二级的则第“二级”就是UIViewController。

3 编写一级视图控制器

删除RootViewController.h, RootViewController.m,RootViewController.xib文件(注:这里删除上面的三个文件重新建文件可

以;如果不删除这三个文件在它们的基础上改写代码也可以。)

创建一个具有nib的ViewController—RedViewController, 然后,重复创建二个YellowViewController BlueViewController。

IB设计一级视图

wps_clip_image-25466

4 添加UINavigationItem按钮

wps_clip_image-13018

5 RedViewController.h

复制代码
#import <UIKit/UIKit.h>#import "YellowViewController.h"@interface RedViewController : UIViewController {    YellowViewController * second;}                                                 @property (nonatomic, retain) YellowViewController * second;- (IBAction) moveToNextView: (id) sender;                                                 @end
复制代码

 

RedViewController.m

复制代码
@implementation RedViewController@synthesize second;- (IBAction) moveToNextView: (id) sender {    YellowViewController *yViewController  = [[YellowViewController alloc]                                               initWithNibName:@"YellowViewController" bundle:nil];    self.second = yViewController;    [yViewController release];    [self.navigationController pushViewController:self.second animated: YES];}
复制代码

 

IB中连接动作

!在IB中把导航按钮连接到动作moveToNextView:

wps_clip_image-28341

6 二级视图

二级视图和三级视图不能够通过IB增加导航按钮,我们要通过程序增加导航按钮

复制代码
#import "YellowViewController.h"@implementation YellowViewController@synthesize three;- (IBAction) moveToNextView: (id) sender {    BlueViewController *bViewController  = [[BlueViewController alloc]                                               initWithNibName:@"BlueViewController" bundle:nil];    self.three = bViewController;    [bViewController release];    [self.navigationController pushViewController:self.three animated: YES];}- (void)viewDidLoad {    [super viewDidLoad];        self.navigationItem.title = @"二级视图";    UIBarButtonItem *nextButton = [[UIBarButtonItem alloc] initWithTitle:@"下一步"                                                                   style:UIBarButtonItemStyleBordered                                                                  target:self                                                                  action:@selector(moveToNextView:)];    self.navigationItem.rightBarButtonItem = nextButton;}- (void)viewDidUnload {    [super viewDidUnload];    self.three = nil;}- (void)dealloc {    [three release];    [super dealloc];}@end
复制代码

 

YellowViewController.h

复制代码
#import <UIKit/UIKit.h>#import "BlueViewController.h"@interface YellowViewController : UIViewController {    BlueViewController * three;}@property (nonatomic, retain) BlueViewController * three;- (IBAction) moveToNextView: (id) sender;@end
复制代码

 

7 三级视图

BlueViewController.h

- (void)viewDidLoad {    [super viewDidLoad];    self.navigationItem.title = @"三级视图";}

 

4.5 iOS应用程序风格类型

根据用户的视觉、行为特性、数据模型、用户体验等方面定义了三种应用风格:

"  效率型应用程序

"  实用型应用程序

"  沉浸式应用程序

1 效率型应用程序

效率型应用程序具有组织和操作具体信息的功能。效率型应用程序通常用于完成比较重要的任务。效率型应用程序通常分层组织信息。邮件是效率型应用程序的典型例子。

2 实用型应用程序

实用型应用程序完成的简单任务对用户输入要求很低。用户打开实用型应用程序,是为了快速查看信息摘要或是在少数对象上执行简单任务 。天气程序就是一个实用型应用程序的典型例子。它在一个易读的摘要中显示了重点明确的信息。

3 沉浸式应用程序

沉浸式应用程序提供具有丰富视觉效果的全屏环境,专注于内容和用户对内容的体验。用户通常使用沉浸式应用程序进行娱乐,不论是玩游戏,观看多媒体内容还是执行简单的任务。

4 编写实用型应用程序

wps_clip_image-11362

5 实用型AP中的模态视图控制器

wps_clip_image-5715

模态视图控制器主要用于“中断”你当前的“工作流程”,转而去做其它的事情,模态视图控制器可以是前面讲过的任何视图控制器。换句话讲它们都可以以模态方式显示视图。

主视图控制器与被呈现的模态视图控制器之间是一中“父子”关系,MainViewController为父视图控制器,FlipsideViewController为子视图控制器。

presentModalViewController:呈现模态控制器

dismissModalViewControllerAnimated:关闭模态

6 实用型AP中的委托设计模式

委托是一种回调或通知机制,在事情发生的时候被调用的。

委托一般定义成为一个协议,实现该协议的对象就是委托对象,其中的实现了该协议的方法将被回调。

MainViewController.h

复制代码
#import "FlipsideViewController.h"@interface MainViewController : UIViewController <FlipsideViewControllerDelegate> {}- (IBAction)showInfo:(id)sender;@end
复制代码

 

FlipsideViewController.h

复制代码
#import <UIKit/UIKit.h>@protocol FlipsideViewControllerDelegate;@interface FlipsideViewController : UIViewController {    id <FlipsideViewControllerDelegate> delegate;}@property (nonatomic, assign) id <FlipsideViewControllerDelegate> delegate;- (IBAction)done:(id)sender;@end@protocol FlipsideViewControllerDelegate- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller;@end
复制代码

 

MainViewController.m实现委托关闭模式视图

- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller {    [self dismissModalViewControllerAnimated:YES];}

 

MainViewController.m呈现模式视图

复制代码
- (IBAction)showInfo:(id)sender {            FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"FlipsideView" bundle:nil];    controller.delegate = self;        controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;//    UIModalTransitionStyleCoverVertical = 0,//    UIModalTransitionStyleFlipHorizontal,//    UIModalTransitionStyleCrossDissolve,//    UIModalTransitionStylePartialCurl,    [self presentModalViewController:controller animated:YES];        [controller release];}
复制代码

 

controller.delegate = self;通过该语句,指定委托对象,就是将当前控制器传递给了模态控制器。

controller.modalTransitionStyle =

UIModalTransitionStyleFlipHorizontal;是模态控制器类型,此外还有:

" UIModalTransitionStyleCoverVertical

" UIModalTransitionStyleCrossDissolve

" UIModalTransitionStylePartialCurl

[self presentModalViewController:controller animated:YES]呈现模态控制器。

FlipsideViewController.m关闭模式视图

wps_clip_image-18283

注:

1 本教程是基于关东升老师的教程

2 基于黑苹果10.6.8和xcode4.2

3 本人初学,有什么不对的望指教

4 教程会随着本人学习,持续更新

5 教程是本人从word笔记中拷贝出来了,所以格式请见谅

原创粉丝点击