iOS应用中使用Toolbar工具栏方式切换视图的方法详解剖析.docx
《iOS应用中使用Toolbar工具栏方式切换视图的方法详解剖析.docx》由会员分享,可在线阅读,更多相关《iOS应用中使用Toolbar工具栏方式切换视图的方法详解剖析.docx(15页珍藏版)》请在冰豆网上搜索。
iOS应用中使用Toolbar工具栏方式切换视图的方法详解剖析
iOS应用中使用Toolbar工具栏方式切换视图的方法详解
这篇文章主要介绍了iOS应用中使用Toolbar工具栏方式切换视图的方法,文中讲解了UIToolbar的相关编写以及使用xib方式创建可切换视图程序的例子,需要的朋友可以参考下
关于UIToolbar
ToolBar工具栏是视图View的属性,可以在工具栏上添加工具栏按钮BarButtonItem(可以是自定义的Custom、也可以是系统自带的BarButtonSystemItem),视图控制器可以通过工具栏项对视图中内容进行操作。
注意事项:
在导航栏控制器中会有一个UIToolBar实例,但默认是隐藏的,如果需要显示,需要通过这个方法将其打开:
在这里需要注意的是,与UINavigationBar类似,导航控制器拥有且只拥有一个UIToolBar实例,但UIToolBar拥有的UIBarButtonItem实例,是由视图控制器进行管理的,如下所示:
工具栏风格:
1
2
3
4
5
6
typedefNS_ENUM(NSInteger,UIBarStyle){
UIBarStyleDefault=0,//默认风格,蓝色文字
UIBarStyleBlack=1,//黑色背景,褐色文字
UIBarStyleBlackOpaque=1,//纯黑色背景,白色文字
UIBarStyleBlackTranslucent=2,//透明黑色背景,白色文字
};
属性:
1
2
3
4
5
@property(nonatomic)UIBarStylebarStyle;//工具栏风格,默认为蓝色
@property(nonatomic,copy)NSArray*items;//工具栏中的按钮单元,UIBarButtonItem
@property(nonatomic,assign,getter=isTranslucent)BOOLtranslucent//是否透明
@property(nonatomic,retain)UIColor*tintColor;//按钮颜色
@property(nonatomic,retain)UIColor*barTintColor;//工具栏颜色
方法:
※设置工具栏中的按钮单元
1
-(void)setItems:
(NSArray*)itemsanimated:
(BOOL)animated;
※设置工具栏的背景图像
复制代码代码如下:
-(void)setBackgroundImage:
(UIImage*)backgroundImageforToolbarPosition:
(UIBarPosition)topOrBottombarMetrics:
(UIBarMetrics)barMetrics;
※获取工具栏的背景图像
复制代码代码如下:
-(UIImage*)backgroundImageForToolbarPosition:
(UIBarPosition)topOrBottombarMetrics:
(UIBarMetrics)barMetrics;
※设置工具栏的阴影图像
复制代码代码如下:
-(void)setShadowImage:
(UIImage*)shadowImageforToolbarPosition:
(UIBarPosition)topOrBottom;
※获取工具栏的阴影图像
复制代码代码如下:
-(UIImage*)shadowImageForToolbarPosition:
(UIBarPosition)topOrBottom;
ToolBar方式切换视图
1、创建工程:
运行Xcode,新建一个EmptyApplication,名称为MultiView,其他设置如下图:
2、创建3个ViewController:
依次选择File—New—NewFile,打开如下窗口:
找到UIViewControllersubclass并单击Next,打开下面的窗口:
输入名称RootViewController,并且保证Subclassof选择UIViewController,下面的两个选框都不选;按照同样的步骤新建两个ViewController,名称分别是FirstViewController和SecondViewController。
建好后,在ProjectNavigation中显示文件如下:
3、为三个ViewController创建.xib文件:
依次选择File—New—NewFile,打开如下窗口:
在左边选UserInterface,右边选View,单击Next,在新窗口中的DeviceFamily中选择iPhone,单击Next,打开如下窗口:
输入名称RootView,单击Create,创建了一个.xib文件。
用同样的方法再创建两个.xib,名称分别是FirstView和SecondView。
4、修改AppDelegate:
4.1单击AppDelegate.h,在其中添加代码,在@interface之前添加@classRootViewController;在@end之前添加@property(strong,nonatomic)RootViewController*rootViewController;添加之后的代码如下:
1
2
3
4
5
6
#import
@classRootViewController;
@interfaceAppDelegate:
UIResponder
@property(strong,nonatomic)UIWindow*window;
@property(strong,nonatomic)RootViewController*rootViewController;
@end
4.2单击AppDelegate.m,修改其代码。
在@implementation之前添加#import"RootViewController.h",在@implementation之后添加@synthesizerootViewController;然后修改didFinishLaunchingWithOptions方法如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
-(BOOL)application:
(UIApplication*)applicationdidFinishLaunchingWithOptions:
(NSDictionary*)launchOptions
{
self.window=[[UIWindowalloc]initWithFrame:
[[UIScreenmainScreen]bounds]];
//Overridepointforcustomizationafterapplicationlaunch.
self.rootViewController=[[RootViewControlleralloc]initWithNibName:
@"RootView"bundle:
nil];
UIView*rootView=self.rootViewController.view;
CGRectrootViewFrame=rootView.frame;
rootViewFrame.origin.y+=[UIApplicationsharedApplication].statusBarFrame.size.height;
rootView.frame=rootViewFrame;
[self.windowaddSubview:
rootView];
self.window.backgroundColor=[UIColorwhiteColor];
[self.windowmakeKeyAndVisible];
returnYES;
}
①
复制代码代码如下:
self.rootViewController=[[RootViewControlleralloc]initWithNibName:
@"RootView"bundle:
nil];
这行代码用于从RootView.xib文件中初始化rootViewController,注意initWithNibName:
@"RootView"中不要后缀名.xib
②
复制代码代码如下:
rootViewFrame.origin.y+=[UIApplicationsharedApplication].statusBarFrame.size.height;
使得RootViewController的视图不会被状态栏挡住
5、修改RootViewController.h:
单击RootViewController.h,在其中添加两个属性和一个方法,如下:
1
2
3
4
5
6
7
8
#import
@classFirstViewController;
@classSecondViewController;
@interfaceRootViewController:
UIViewController
@property(strong,nonatomic)FirstViewController*firstViewController;
@property(strong,nonatomic)SecondViewController*secondViewController;
-(IBAction)switchViews:
(id)sender;
@end
6、打开RootView.xib,在坐边选择File'sOwner,在右边打开IdentityInspector,在Class下拉菜单选择RootViewController:
这样,我们
就可以从RootView.xib文件向RootViewController创建Outlet和Action了。
7、为RootView.xib添加工具栏:
打开RootView.xib,拖一个ToolBar到视图上,双击ToolBar上的按钮,修改其名称为SwitchViews:
8、添加Action映射:
选中SwitchViews按钮,按住Control,拖到File'sOwner,松开鼠标后选择switchViews方法:
9、选择File'sOwner,按住Control键,拖到View,松开鼠标,选择view:
10、修改RootViewController.m:
打开RootViewController.m文件,在@implementation之前添加代码:
1
2
#import"FirstViewController.h"
#import"SecondViewController.h"
在@implementation之后添加代码:
1
2
@synthesizefirstViewController;
@synthesizesecondViewController;
接下来修改viewDidLoad方法,这个方法默认是被注释掉的,先去掉其周围的注释符,然后修改其代码如下:
1
2
3
4
5
6
-(void)viewDidLoad
{
self.firstViewController=[[FirstViewControlleralloc]initWithNibName:
@"FirstView"bundle:
nil];
[self.viewinsertSubview:
firstViewController.viewatIndex:
0];
[superviewDidLoad];
}
添加switchViews方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-(IBAction)switchViews:
(id)sender{
if(self.secondViewController.view.superview==nil){
if(self.secondViewController==nil){
self.secondViewController=[[SecondViewControlleralloc]initWithNibName:
@"SecondView"bundle:
nil];
}
[firstViewController.viewremoveFromSuperview];
[self.viewinsertSubview:
self.secondViewController.viewatIndex:
0];
}else{
if(self.firstViewController==nil){
self.firstViewController=
[[FirstViewControlleralloc]initWithNibName:
@"FirstView"bundle:
nil];
}
[secondViewController.viewremoveFromSuperview];
[self.viewinsertSubview:
self.firstViewController.viewatIndex:
0];
}
}
修改didReceiveMemoryWarning方法:
1
2
3
4
5
6
7
8
9
-(void)didReceiveMemoryWarning
{
[superdidReceiveMemoryWarning];
if(self.firstViewCsuperview==nil){
self.firstViewController=nil;
}else{
self.secondViewController=nil;
}
}
11、打开FirstView.xib文件,选择左边的File'sOwner,然后在IdentityInspector中选择Class为FirstViewController;然后按住Control键从File'sOwner图标拖到View,在弹出的菜单选择view。
为SecondView.xib进行同样的操作,不过Class选择为SecondViewController。
12、打开FirstView.xib文件,选择View,打开AttributeInspector,进行如下设置:
对SecondView.xib进行同样设置,不过背景颜色设成红色。
13、此时运行程序,你会看见刚启动的时候,程序显示的绿色背景,轻触SwitchViews按钮后,背景变成了红色。
不断轻触按钮,背景不断变换。
14、添加切换背景的动画效果:
打开RootViewController.m,修改其中的switchViews方法如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-(IBAction)switchViews:
(id)sender{
[UIViewbeginAnimations:
@"ViewFlip"context:
nil];
[UIViewsetAnimationDuration:
1.25];
[UIViewsetAnimationCurve:
UIViewAnimationCurveEaseInOut];
if(self.secondViewController.view.superview==nil){
if(self.secondViewController==nil){
self.secondViewController=[[SecondViewControlleralloc]initWithNibName:
@"SecondView"bundle:
nil];
}
[UIViewsetAnimationTransition:
UIViewAnimationTransitionFlipFromRightforView:
self.viewcache:
YES];
[self.firstViewController.viewremoveFromSuperview];
[self.viewinsertSubview:
self.secondViewController.viewatIndex:
0];
}else{
if(self.firstViewController==nil){
self.firstViewController=[[FirstViewControlleralloc]initWithNibName:
@"FirstView"bundle:
nil];
}
[UIViewsetAnimationTransition:
UIViewAnimationTransitionCurlUpforView:
self.viewcache:
YES];
[self.secondViewController.viewremoveFromSuperview];
[self.viewinsertSubview:
self.firstViewController.viewatIndex:
0];
}
[UIViewcommitAnimations];
}
注意四个表示切换效果的常量:
1
2
3
4
UIViewAnimationTransitionFlipFromLeft
UIViewAnimationTransitionFlipFromRight
UIViewAnimationTransitionCurlDown
UIViewAnimationTransitionCurlUp
分别表示从左翻转、从右翻转、向下卷、向上卷。
运行后翻页效果如下: