iOS(三)实现App底部TabBar的切换:二
2015-11-19 19:38
295 查看
上一篇讲述了iOS自带的TabBar,但在我所见到的很多App源码中大多用了自己写的TabBar,惯例先上图:
这只是一个最简单的TabBar,但重在原理,虽然是我懒。。。。
HomeViewController.h
HomeViewController.m
ClassViewController.h
ClassViewController.m
PrivateViewController.h
PrivateViewController.m
这六个文件详情见上一篇
添加自定义的TabBar文件
ItemView.h
#import <UIKit/UIKit.h>
//用来定义tabbar按钮大小位置,图片,被选中时的颜色
@interface ItemView :UIControl
{
UIImageView *Itemimageview;
UILabel *Itemlabel;
}
-(void)setItemImage:(UIImage *)image forState:(UIControlState)state;//某种状态下的图片
-(void)setItemTitle:(NSString *)title;//tabbar按钮下的文字
-(void)setItemSelected:(BOOL)isSelected;//当定义的按钮被点击时,告诉被选中了
@end
ItemView.m
#import "ItemView.h"
@implementation ItemView
-(instancetype)initWithFrame:(CGRect)frame{
self=[superinitWithFrame:frame];
if (self) {
CGFloat itemHeight=CGRectGetHeight(frame);
CGFloat itemWidth =CGRectGetWidth(frame);
Itemimageview=[[UIImageViewalloc]initWithFrame:CGRectMake((itemWidth-22)/2,10.f,
22.f,20.f)];
Itemimageview.contentMode=UIViewContentModeScaleAspectFit;
[self
addSubview:Itemimageview];
//定义iamgeView的位值大小,以及图片contentMode属性
Itemlabel=[[UILabelalloc]initWithFrame:CGRectMake(0.f,
itemHeight-20.f,
itemWidth,
20.f)];
Itemlabel.textAlignment=NSTextAlignmentCenter;//字体居中
Itemlabel.backgroundColor=[UIColorclearColor];
Itemlabel.font=[UIFontboldSystemFontOfSize:9.f];
Itemlabel.highlightedTextColor=[UIColorblackColor];
Itemlabel.textColor=[UIColorcolorWithRed:254.f/255.f
green:87.f/255.f
blue:178.f/255.f
alpha:1];
[self
addSubview:Itemlabel];
}
returnself;
}
-(void)setItemImage:(UIImage *)image forState:(UIControlState)state{
if (state==UIControlStateNormal) {
Itemimageview.image=image;
} elseif(state==UIControlStateSelected){
Itemimageview.highlightedImage=image;
}
}
-(void)setItemTitle:(NSString *)title{
Itemlabel.text=title;
}
-(void)setItemSelected:(BOOL)isSelected{
Itemimageview.highlighted=isSelected;
Itemlabel.highlighted=isSelected;
}
@end
接着修改
ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController :UITabBarController
@end
ViewController.m
#import "ViewController.h"
#import "PrivateViewController.h"
#import "ClassViewController.h"
#import "HomeViewController.h"
#import "ItemView.h"
@interfaceViewController ()
{
ItemView *select_TabItem;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
[selfcreateViewControllers];//创建多个视图
[selfcreateTabBarItem];//创建TabBar
// Do any additional setup after loading the view, typically from a nib.
}
-(void)createViewControllers{
ClassViewController *ClassVC=[[ClassViewControlleralloc]init];
PrivateViewController *PrivateVC=[[PrivateViewControlleralloc]init];
HomeViewController *HomeVC=[[HomeViewControlleralloc]init];
NSArray *VCarray=@[HomeVC,ClassVC,PrivateVC];
NSMutableArray *UINavi=[[NSMutableArrayalloc]initWithCapacity:3];
for (int i=0; i<3; i++) {
UINavigationController *navi=[[UINavigationControlleralloc]
initWithRootViewController:VCarray[i]];
[UINavi addObject:navi];
}
self.viewControllers=UINavi;
}
- (void)TabBarclick:(ItemView *)sender {
if (select_TabItem != sender) {
[select_TabItemsetItemSelected:NO];//之前的TabBar变为普通状态
[sender setItemSelected:YES];//被点击的TabBar变为选中状态
select_TabItem = sender;
self.selectedIndex
= sender.tag;
//TabBarController的selectedIndex就是用来确定进入到哪个视图,之前总共赋予了三个VC,所以selectedIndex就有0,1,2三个值
}
}
- (void)createTabBarItem{
for(UIView *TabBarItemin
self.tabBar.subviews){
[TabBarItem removeFromSuperview];
}//移除原有的TabBarItem
CGFloat itemWidth=self.view.frame.size.width/self.viewControllers.count;
NSArray *titlearray=@[@"首页",@"分类",@"个人"];
NSArray *imagearray=@[@"home",@"classify",@"person"];
NSArray *imagearray_select=@[@"home_s",@"classify_s",@"person_s"];
for (int i=0; i<3; i++) {
ItemView *TabItem=[[ItemViewalloc]initWithFrame:CGRectMake(itemWidth*i,0,
itemWidth, self.tabBar.frame.size.height)];
[TabItem
addTarget:selfaction:@selector(TabBarclick:)forControlEvents:UIControlEventTouchUpInside];
//给TabBar添加点击的操作
TabItem.tag=i;
[TabItem setItemImage:[UIImageimageNamed:imagearray[i]]
forState:UIControlStateNormal];
//给TabBar添加普通情况的图片
[TabItem setItemImage:[UIImageimageNamed:imagearray_select[i]]
forState:UIControlStateSelected];
//给TabBar添加被选中时的图片
[TabItem setItemTitle:titlearray[i]];
//给每个TabBar添加文字
[self.tabBaraddSubview:TabItem];
if (i==0) {
[TabItem setItemSelected:YES];
select_TabItem=TabItem;
}
//默认情况下,第一个被选中,所以设置成选中状态
}
}
- (void)didReceiveMemoryWarning {
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
下一篇 自己写的动漫App /article/9297482.html
这只是一个最简单的TabBar,但重在原理,虽然是我懒。。。。
HomeViewController.h
HomeViewController.m
ClassViewController.h
ClassViewController.m
PrivateViewController.h
PrivateViewController.m
这六个文件详情见上一篇
添加自定义的TabBar文件
ItemView.h
#import <UIKit/UIKit.h>
//用来定义tabbar按钮大小位置,图片,被选中时的颜色
@interface ItemView :UIControl
{
UIImageView *Itemimageview;
UILabel *Itemlabel;
}
-(void)setItemImage:(UIImage *)image forState:(UIControlState)state;//某种状态下的图片
-(void)setItemTitle:(NSString *)title;//tabbar按钮下的文字
-(void)setItemSelected:(BOOL)isSelected;//当定义的按钮被点击时,告诉被选中了
@end
ItemView.m
#import "ItemView.h"
@implementation ItemView
-(instancetype)initWithFrame:(CGRect)frame{
self=[superinitWithFrame:frame];
if (self) {
CGFloat itemHeight=CGRectGetHeight(frame);
CGFloat itemWidth =CGRectGetWidth(frame);
Itemimageview=[[UIImageViewalloc]initWithFrame:CGRectMake((itemWidth-22)/2,10.f,
22.f,20.f)];
Itemimageview.contentMode=UIViewContentModeScaleAspectFit;
[self
addSubview:Itemimageview];
//定义iamgeView的位值大小,以及图片contentMode属性
Itemlabel=[[UILabelalloc]initWithFrame:CGRectMake(0.f,
itemHeight-20.f,
itemWidth,
20.f)];
Itemlabel.textAlignment=NSTextAlignmentCenter;//字体居中
Itemlabel.backgroundColor=[UIColorclearColor];
Itemlabel.font=[UIFontboldSystemFontOfSize:9.f];
Itemlabel.highlightedTextColor=[UIColorblackColor];
Itemlabel.textColor=[UIColorcolorWithRed:254.f/255.f
green:87.f/255.f
blue:178.f/255.f
alpha:1];
[self
addSubview:Itemlabel];
}
returnself;
}
-(void)setItemImage:(UIImage *)image forState:(UIControlState)state{
if (state==UIControlStateNormal) {
Itemimageview.image=image;
} elseif(state==UIControlStateSelected){
Itemimageview.highlightedImage=image;
}
}
-(void)setItemTitle:(NSString *)title{
Itemlabel.text=title;
}
-(void)setItemSelected:(BOOL)isSelected{
Itemimageview.highlighted=isSelected;
Itemlabel.highlighted=isSelected;
}
@end
接着修改
ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController :UITabBarController
@end
ViewController.m
#import "ViewController.h"
#import "PrivateViewController.h"
#import "ClassViewController.h"
#import "HomeViewController.h"
#import "ItemView.h"
@interfaceViewController ()
{
ItemView *select_TabItem;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
[selfcreateViewControllers];//创建多个视图
[selfcreateTabBarItem];//创建TabBar
// Do any additional setup after loading the view, typically from a nib.
}
-(void)createViewControllers{
ClassViewController *ClassVC=[[ClassViewControlleralloc]init];
PrivateViewController *PrivateVC=[[PrivateViewControlleralloc]init];
HomeViewController *HomeVC=[[HomeViewControlleralloc]init];
NSArray *VCarray=@[HomeVC,ClassVC,PrivateVC];
NSMutableArray *UINavi=[[NSMutableArrayalloc]initWithCapacity:3];
for (int i=0; i<3; i++) {
UINavigationController *navi=[[UINavigationControlleralloc]
initWithRootViewController:VCarray[i]];
[UINavi addObject:navi];
}
self.viewControllers=UINavi;
}
- (void)TabBarclick:(ItemView *)sender {
if (select_TabItem != sender) {
[select_TabItemsetItemSelected:NO];//之前的TabBar变为普通状态
[sender setItemSelected:YES];//被点击的TabBar变为选中状态
select_TabItem = sender;
self.selectedIndex
= sender.tag;
//TabBarController的selectedIndex就是用来确定进入到哪个视图,之前总共赋予了三个VC,所以selectedIndex就有0,1,2三个值
}
}
- (void)createTabBarItem{
for(UIView *TabBarItemin
self.tabBar.subviews){
[TabBarItem removeFromSuperview];
}//移除原有的TabBarItem
CGFloat itemWidth=self.view.frame.size.width/self.viewControllers.count;
NSArray *titlearray=@[@"首页",@"分类",@"个人"];
NSArray *imagearray=@[@"home",@"classify",@"person"];
NSArray *imagearray_select=@[@"home_s",@"classify_s",@"person_s"];
for (int i=0; i<3; i++) {
ItemView *TabItem=[[ItemViewalloc]initWithFrame:CGRectMake(itemWidth*i,0,
itemWidth, self.tabBar.frame.size.height)];
[TabItem
addTarget:selfaction:@selector(TabBarclick:)forControlEvents:UIControlEventTouchUpInside];
//给TabBar添加点击的操作
TabItem.tag=i;
[TabItem setItemImage:[UIImageimageNamed:imagearray[i]]
forState:UIControlStateNormal];
//给TabBar添加普通情况的图片
[TabItem setItemImage:[UIImageimageNamed:imagearray_select[i]]
forState:UIControlStateSelected];
//给TabBar添加被选中时的图片
[TabItem setItemTitle:titlearray[i]];
//给每个TabBar添加文字
[self.tabBaraddSubview:TabItem];
if (i==0) {
[TabItem setItemSelected:YES];
select_TabItem=TabItem;
}
//默认情况下,第一个被选中,所以设置成选中状态
}
}
- (void)didReceiveMemoryWarning {
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
下一篇 自己写的动漫App /article/9297482.html
相关文章推荐
- android Services注意地方
- APP功能测试点
- APP的UI测试
- Android中的visibility属性
- iOS - CocoaPods使用傻瓜简版
- android触控之MotionEvent
- android windows的一些item属性
- AvalonDock 2.0+Caliburn.Micro+MahApps.Metro实现Metro风格插件式系统(二)
- iOS KVO 设计模式的应用
- 关于Activity的横竖屏切换引起的生命周期变化的问题
- APP的安装卸载测试
- ios编程之蓝牙交互
- AsyncTask源码浅析
- ios编程360相机滤镜
- [转]Android关于使用混淆文件proguard-project.txt笔记
- AvalonDock 2.0+Caliburn.Micro+MahApps.Metro实现Metro风格插件式系统(一)
- ios枷锁解锁
- Android Studio1.4.x JNI开发基础-基本环境配置
- Android中ListView分类
- Otto与EventBus框架比较