1.思路:创建一个继承UIView的TabBar类,并将需要的item添加到TabBar上面去,并用代理来处理相应的时间
[self.view bringSubviewToFront:self.oneView];//将这个视图提到前面去
/**
当视图将要添加到对应的父视图的时候调用
*/
-(void)willMoveToSuperview:(UIView *)newSuperview
{
self.frame=newSuperview.bounds;
}
下面是代码片段结构

重要片段
TabBarGlobleDefine.h
// // TabBarGlobleDefine.h // 自定义TabBar // // Created by HYYT_IOS_ONE on 16/3/3. // Copyright © 2016年 zhousheng. All rights reserved. // #ifndef TabBarGlobleDefine_h #define TabBarGlobleDefine_h #define kScreenWith [UIScreen mainScreen].bounds.size.width #endif /* TabBarGlobleDefine_h */
ViewController.h
// // ViewController.h // 自定义TabBar // // Created by HYYT_IOS_ONE on 16/2/29. // Copyright © 2016年 zhousheng. All rights reserved. // // #import <UIKit/UIKit.h> @interface ViewController : UIViewController @end
viewController.m
//
// ViewController.m
// 自定义TabBar
//
// Created by HYYT_IOS_ONE on 16/2/29.
// Copyright © 2016年 zhousheng. All rights reserved.
//
//
#import "ViewController.h"
#import "ZSTabBar.h"
#import "ZSOneView.h"
#import "ZSTwoView.h"
#import "ZSThree.h"
@interface ViewController ()<ZSTabBarDelegate>
@property(nonatomic,strong)ZSOneView*oneView;
@property(nonatomic,strong)ZSTwoView*twoView;
@property(nonatomic,strong)ZSThree*threeView;
@property(nonatomic,strong)ZSTabBar*tabBar;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//创建tabBar
ZSTabBar*tabBar=[ZSTabBar tabBar];
tabBar.backgroundColor=[UIColor grayColor];
tabBar.delegate=self;
//创建UIButton
UIButton*btn1=[[UIButton alloc]init];
btn1.backgroundColor=[UIColor redColor];
[self tabBarItemWithButton:btn1 AndTitle:@"我是tabBar1" AndNorModel:nil AnddisModel:nil];
UIButton*btn2=[[UIButton alloc]init];
btn2.backgroundColor=[UIColor greenColor];
[self tabBarItemWithButton:btn2 AndTitle:@"我是tabBar2" AndNorModel:nil AnddisModel:nil];
UIButton*btn3=[[UIButton alloc]init];
btn3.backgroundColor=[UIColor orangeColor];
[self tabBarItemWithButton:btn3 AndTitle:@"我是tabBar3" AndNorModel:nil AnddisModel:nil];
tabBar.items=@[btn1,btn2,btn3];
[self.view addSubview:tabBar];
self.tabBar=tabBar;
}
#pragma mark---进行懒加载添加视图
-(ZSOneView*)oneView
{
if (_oneView==nil) {
_oneView=[[ZSOneView alloc]init];
[self.view addSubview:_oneView];
}
return _oneView;
}
-(ZSTwoView*)twoView
{
if (!_twoView) {
_twoView=[[ZSTwoView alloc]init];
[self.view addSubview:_twoView];
}
return _twoView;
}
-(ZSThree*)threeView
{
if (!_threeView) {
_threeView=[[ZSThree alloc]init];
[self.view addSubview:_threeView];
}
return _threeView;
}
#pragma mark---ZSTabBarDelegate遵守协议
-(void)buttonWithStatue:(UIButton *)button
{
if (button.tag==1000) {
[self.view bringSubviewToFront:self.oneView];
NSLog(@"%ld",button.tag);
button.enabled=NO;
}
else if(button.tag==1001){
[self.view bringSubviewToFront:self.twoView];
button.enabled=NO;
}
else{
[self.view bringSubviewToFront:self.threeView];
button.enabled=NO;
}
[self.view bringSubviewToFront:self.tabBar];
}
#pragma mark---设置TabBar上Items的样式
-(void)tabBarItemWithButton:(UIButton*)button AndTitle:(NSString*)title AndNorModel:(NSString*)normelColol AnddisModel:(NSString*)disModel
{
[button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor blackColor] forState:UIControlStateDisabled];
[button setTitle:title forState:UIControlStateNormal];
[button setTitle:title forState:UIControlStateDisabled];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
ZSTabBar.h
1 // 2 // ZSTabBar.h 3 // 自定义TabBar 4 // 5 // Created by HYYT_IOS_ONE on 16/2/29. 6 // Copyright © 2016年 zhousheng. All rights reserved. 7 // 8 9 #import <UIKit/UIKit.h> 10 11 12 /** 13 *创建协议 14 */ 15 @protocol ZSTabBarDelegate <NSObject> 16 @optional 17 -(void)buttonWithStatue:(UIButton*)button; 18 19 @end 20 21 @interface ZSTabBar : UIView 22 23 +(instancetype)tabBar; 24 25 @property(nonatomic,strong)NSMutableArray*items; 26 27 @property(nonatomic,strong)NSMutableArray*tabarItems; 28 29 @property(nonatomic,weak)id<ZSTabBarDelegate>delegate; 30 31 @end
ZSTabBar.m
1 // 2 // ZSTabBar.m 3 // 自定义TabBar 4 // 5 // Created by HYYT_IOS_ONE on 16/2/29. 6 // Copyright © 2016年 zhousheng. All rights reserved. 7 // 8 9 #import "ZSTabBar.h" 10 #import "UIView+ZSFrame.h" 11 #import "TabBarGlobleDefine.h" 12 13 @implementation ZSTabBar 14 15 16 17 +(instancetype)tabBar 18 { 19 return [[self alloc]init]; 20 } 21 22 -(void)willMoveToSuperview:(UIView *)newSuperview 23 { 24 CGFloat tabBarH=49.0; 25 CGFloat tabBarW=newSuperview.bounds.size.width; 26 CGFloat tabBarX=0; 27 CGFloat tabBarY=newSuperview.bounds.size.height-tabBarH; 28 29 self.frame=CGRectMake(tabBarX, tabBarY, tabBarW, tabBarH); 30 31 } 32 33 34 -(NSMutableArray*)tabarItems 35 { 36 if (!_tabarItems) { 37 _tabarItems=[NSMutableArray array]; 38 } 39 40 return _tabarItems; 41 } 42 //创建一个set方法 43 -(void)setItems:(NSMutableArray *)items 44 { 45 for (int i=0; i<items.count; i++) { 46 UIButton*button=items[i]; 47 button.tag=1000+i; 48 CGFloat btnW=kScreenWith/items.count; 49 CGFloat btnH=49; 50 CGFloat btnX=i*btnW; 51 CGFloat btnY=0; 52 button.frame=CGRectMake(btnX, btnY, btnW, btnH); 53 54 [button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside]; 55 [self addSubview:button]; 56 [self.tabarItems addObject:items[i]]; 57 } 58 //默认情况下选中第一个button; 59 [self buttonClick:items[0]]; 60 } 61 62 63 64 -(void)buttonClick:(UIButton*)button 65 { 66 for (int i=0; i<self.tabarItems.count; i++) { 67 UIButton*button=(UIButton*)self.tabarItems[i]; 68 button.enabled=YES; 69 } 70 71 72 [_delegate buttonWithStatue:button]; 73 74 } 75 76 77 @end
ZSOneView.h
// // ZSOneView.h // 自定义TabBar // // Created by HYYT_IOS_ONE on 16/3/2. // Copyright © 2016年 zhousheng. All rights reserved. // #import <UIKit/UIKit.h> @interface ZSOneView : UIView @end
ZSOneView.m
1 // 2 // ZSOneView.m 3 // 自定义TabBar 4 // 5 // Created by HYYT_IOS_ONE on 16/3/2. 6 // Copyright © 2016年 zhousheng. All rights reserved. 7 // 8 9 #import "ZSOneView.h" 10 11 @implementation ZSOneView 12 13 - (instancetype)initWithFrame:(CGRect)frame 14 { 15 self = [super initWithFrame:frame]; 16 if (self) { 17 18 self.backgroundColor=[UIColor grayColor]; 19 } 20 return self; 21 } 22 23 24 25 //将移动到父视图的时候调用 26 -(void)willMoveToSuperview:(UIView *)newSuperview 27 { 28 self.frame=newSuperview.bounds; 29 } 30 31 @end
ZSTwoView 和ZSThree同ZSone
演示效果