之前讨论的都是单视图应用程序,而在实际应用中,我们可能要多个视图,并根据用户的需要切换视图。
iOS中几种典型的多视图程序:
(1)Tab bar Application:程序的底部有一排按钮,轻触其中一个按钮,相应的视图被激活并显示出来;
(2)Navigation-Based Application:其特点是使用navigation controller,而navigation controller使用navigation bar来控制多级视图;
(3)Tool bar Application:程序的底部有一个工具条,利用工具条中的按钮来切换视图,经常与Tab bar Application混淆。
这次要做的例子就是使用了Tool bar,只是简单了实现了视图切换功能,并添加一些视图切换时的效果。在做例子之前,首先要了解一下视图的切换原理。
一般来说,一个多视图的程序要至少三个VIEw Controller,其中一个作为Root Controller。所谓Root Controller,是指用户看到的第一个Controller,并且在程序加载时这个Controller就加载了。
Root Controller通常是UINavigationController或者UITabbarController的子类,也可以是UIVIEwController的一个子类。
在多视图程序中,Root Controller的工作获得两个或者更多的其他视图,并根据用户输入显示不用的视图。
除Root Controller之外,其他视图就作为Content Controller,可以理解为可能会显示出来的各种视图。
为了更好地理解多视图程序的结构,我们从Empty Application开始创建我们的程序。
1、创建工程:
运行Xcode 4.2,新建一个Empty Application,名称为multiview,其他设置如下图:
2、创建3个VIEw Controller:
依次选择file — New — New file,打开如下窗口:
找到UIVIEwController subclass并单击Next,打开下面的窗口:
输入名称RootVIEwController,并且保证Subclass of选择UIVIEwController,下面的两个选框都不选;按照同样的步骤新建两个VIEw Controller,名称分别是FirstVIEwController和SecondVIEwController。建好后,在Project Navigation中显示文件如下:
3、为三个VIEw Controller创建.xib文件:
依次选择file — New — New file,打开如下窗口:
在左边选User Interface,右边选VIEw,单击Next,在新窗口中的Device Family中选择iPhone,单击Next,打开如下窗口:
输入名称RootVIEw,单击Create,创建了一个.xib文件。用同样的方法再创建两个.xib,名称分别是FirstVIEw和SecondVIEw。
4、修改App Delegate:
4.1 单击AppDelegate.h,在其中添加代码,在@interface之前添加@class RootVIEwController;在@end之前添加@property (strong,nonatomic) RootVIEwController *rootVIEwController;添加之后的代码如下:
#import <UIKit/UIKit.h>@class RootVIEwController;@interface AppDelegate : UIResponder <UIApplicationDelegate>@property (strong,nonatomic) UIWindow *window;@property (strong,nonatomic) RootVIEwController *rootVIEwController;@end
4.2 单击AppDelegate.m,修改其代码。在@implementation之前添加#import "RootVIEwController.h",在@implementation之后添加@synthesize rootVIEwController;然后修改dIDFinishLaunchingWithOptions方法如下:
- (BOol)application:(UIApplication *)application dIDFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // OverrIDe point for customization after application launch. self.rootVIEwController = [[RootVIEwController alloc] initWithNibname:@"RootVIEw" bundle:nil]; UIVIEw *rootVIEw = self.rootVIEwController.vIEw; CGRect rootVIEwFrame = rootVIEw.frame; rootVIEwFrame.origin.y += [UIApplication sharedApplication].statusbarFrame.size.height; rootVIEw.frame = rootVIEwFrame; [self.window addSubvIEw:rootVIEw]; self.window.backgroundcolor = [UIcolor whitecolor]; [self.window makeKeyAndVisible]; return YES;}
① self.rootVIEwController = [[RootVIEwController alloc] initWithNibname:@"RootVIEw" bundle:nil];
这行代码用于从RootVIEw.xib文件中初始化rootVIEwController,注意initWithNibname:@"RootVIEw"中不要后缀名.xib
② rootVIEwFrame.origin.y += [UIApplication sharedApplication].statusbarFrame.size.height;
使得RootVIEwController的视图不会被状态栏挡住
5、修改RootVIEwController.h:
单击RootVIEwController.h,在其中添加两个属性和一个方法,如下:
#import <UIKit/UIKit.h>@class FirstVIEwController;@class SecondVIEwController;@interface RootVIEwController : UIVIEwController@property (strong,nonatomic) FirstVIEwController *firstVIEwController;@property (strong,nonatomic) SecondVIEwController *secondVIEwController;- (IBAction)switchVIEws:(ID)sender;@end
6、打开RootVIEw.xib,在坐边选择file’s Owner,在右边打开IDentity Inspector,在Class下拉菜单选择RootVIEwController:
这样,我们就可以从RootVIEw.xib文件向RootVIEwController创建Outlet和Action了。
7、为RootVIEw.xib添加工具栏:打开RootVIEw.xib,拖一个Tool bar到视图上,双击Tool bar上的按钮,修改其名称为Switch VIEws:
8、添加Action映射:
选中Switch VIEws按钮,按住Control,拖到file’s Owner,松开鼠标后选择switchVIEws方法:
9、选择file’s Owner,按住Control键,拖到VIEw,松开鼠标,选择vIEw:
10、修改RootVIEwController.m:
打开RootVIEwController.m文件,在@implementation之前添加代码:
#import "FirstVIEwController.h"#import "SecondVIEwController.h"
在@implementation之后添加代码:
@synthesize firstVIEwController;@synthesize secondVIEwController;
接下来修改vIEwDIDLoad方法,这个方法默认是被注释掉的,先去掉其周围的注释符,然后修改其代码如下:
- (voID)vIEwDIDLoad{ self.firstVIEwController = [[FirstVIEwController alloc] initWithNibname:@"FirstVIEw" bundle:nil]; [self.vIEw insertSubvIEw: firstVIEwController.vIEw atIndex:0]; [super vIEwDIDLoad];}
添加switchVIEws方法:
- (IBAction)switchVIEws:(ID)sender { if (self.secondVIEwController.vIEw.supervIEw == nil) { if (self.secondVIEwController == nil) { self.secondVIEwController = [[SecondVIEwController alloc] initWithNibname:@"SecondVIEw" bundle:nil]; } [firstVIEwController.vIEw removeFromSupervIEw]; [self.vIEw insertSubvIEw:self.secondVIEwController.vIEw atIndex:0]; } else { if (self.firstVIEwController == nil) { self.firstVIEwController = [[FirstVIEwController alloc] initWithNibname:@"FirstVIEw" bundle:nil]; } [secondVIEwController.vIEw removeFromSupervIEw]; [self.vIEw insertSubvIEw:self.firstVIEwController.vIEw atIndex:0]; } }
修改dIDReceiveMemoryWarning方法:
- (voID)dIDReceiveMemoryWarning{ [super dIDReceiveMemoryWarning]; if (self.firstVIEwController.vIEw.supervIEw == nil) { self.firstVIEwController = nil; } else { self.secondVIEwController = nil; } }
11、打开FirstVIEw.xib文件,选择左边的file’s Owner,然后在IDentity Inspector中选择Class为FirstVIEwController;然后按住Control键从file’s Owner图标拖到VIEw,在d出的菜单选择vIEw。为SecondVIEw.xib进行同样的 *** 作,不过Class选择为SecondVIEwController。
12、打开FirstVIEw.xib文件,选择VIEw,打开Attribute Inspector,进行如下设置:
对SecondVIEw.xib进行同样设置,不过背景颜色设成红色。
13、此时运行程序,你会看见刚启动的时候,程序显示的绿色背景,轻触Switch VIEws按钮后,背景变成了红色。不断轻触按钮,背景不断变换。
14、添加切换背景的动画效果:
打开RootVIEwController.m,修改其中的switchVIEws方法如下:
- (IBAction)switchVIEws:(ID)sender { [UIVIEw beginAnimations:@"VIEw Flip" context:nil]; [UIVIEw setAnimationDuration:1.25]; [UIVIEw setAnimationCurve:UIVIEwAnimationCurveEaseInOut]; if (self.secondVIEwController.vIEw.supervIEw == nil) { if (self.secondVIEwController == nil) { self.secondVIEwController = [[SecondVIEwController alloc] initWithNibname:@"SecondVIEw" bundle:nil]; } [UIVIEw setAnimationTransition: uiviewanimationtransitionFlipFromright forVIEw:self.vIEw cache:YES]; [self.firstVIEwController.vIEw removeFromSupervIEw]; [self.vIEw insertSubvIEw:self.secondVIEwController.vIEw atIndex:0]; } else { if (self.firstVIEwController == nil) { self.firstVIEwController = [[FirstVIEwController alloc] initWithNibname:@"FirstVIEw" bundle:nil]; } [UIVIEw setAnimationTransition: uiviewanimationtransitionCurlUp forVIEw:self.vIEw cache:YES]; [self.secondVIEwController.vIEw removeFromSupervIEw]; [self.vIEw insertSubvIEw:self.firstVIEwController.vIEw atIndex:0]; } [UIVIEw commitAnimations]; }
注意四个表示切换效果的常量:
uiviewanimationtransitionFlipFromleftuiviewanimationtransitionFlipFromrightuiviewanimationtransitionCurlDownuiviewanimationtransitionCurlUp
分别表示从左翻转、从右翻转、向下卷、向上卷。
运行后翻页效果如下:
最终代码:http://www.oschina.net/code/snippet_164134_10918
总结以上是内存溢出为你收集整理的iOS开发8:使用Tool Bar切换视图全部内容,希望文章能够帮你解决iOS开发8:使用Tool Bar切换视图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)