TabBar自定义方式(一)

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

演示效果

原文地址:https://www.cnblogs.com/qitiandasheng/p/5238812.html