ios 自定义UITabBarController的TabBar

原理:TabBar本身是一个View,自定义一个继承TabBar的uiview,然后替换掉原来的TabBar

下面直接上代码,直接复制的代码,可能出现错误,最下方有截图

自定义的TabBar,WDYTabbar.h文件

#import

@class WDYTabbar;

@protocol  WDYTabbarDelegate

- (void)tabbar:(WDYTabbar *)tabbar didSelectedFrom:(NSInteger)from to:(NSInteger)to;

@end

@interface WDYTabbar : UIView

@property (nonatomic, weak) iddelegate;

/**

* 传普通状态和选中状态的图片,内部就帮你添加一个按钮

*/

-(void)addTabbarBtnWithNormalImg:(NSString *)normalImg selImg:(NSString *)selImg;

@end

//自定义按钮,主要是为了去掉Tabbar按钮的高亮状态

@interface CZTabbarButton : UIButton

@end

自定义的TabBar,WDYTabbar.m文件

#import "WDYTabbar.h"

@interface WDYTabbar ()

/**

* 当前选中的按钮

*/

@property (nonatomic, weak) UIButton *selectedBtn;

@end

@implementation WDYTabbar

/*

*自定义控件

1.在initWithFrame初始化的方法,添加子控件

2.layoutSubviews 布局子控件frm

*/

- (instancetype)initWithFrame:(CGRect)frame{

//    NSLog(@"%lf, %lf, %lf, %lf,", frame.origin.x, frame.origin.y, frame.size.width, frame.size.height);

//

if (self = [super initWithFrame:frame]) {

//        self.backgroundColor = [UIColor grayColor];

self.backgroundColor = [UIColor colorWithRed:192/255 green:192/255 blue:192/255 alpha:0.4];

}

return  self;

}

#pragma mark 初始化按钮

-(void)addTabbarBtnWithNormalImg:(NSString *)normalImg selImg:(NSString *)selImg{

UIButton *btn = [CZTabbarButton buttonWithType:UIButtonTypeCustom];

[btn setBackgroundImage:[UIImage imageNamed:normalImg] forState:UIControlStateNormal];

[btn setBackgroundImage:[UIImage imageNamed:selImg] forState:UIControlStateSelected];

//监听事件

[btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchDown];

//绑定tag

#warning tag绑定要在addSubview的方法之前

btn.tag = self.subviews.count;

[self addSubview:btn];

//设置默认选中

if (btn.tag == 0) {

//        btn.selected = YES;

//        self.selectedBtn = btn;

[self btnClick:btn];

}

}

-(void)layoutSubviews{

[super layoutSubviews];

NSInteger count = self.subviews.count;

//布局子控件

//按钮宽度与高度

CGFloat btnW = 80;

CGFloat btnH = self.bounds.size.height-10;

CGFloat initialX  = self.bounds.size.width/4 + 50;

//自定义的tabbar添加5个按钮

//    for (NSInteger i = 0; i < count; i++) {

//

//        //获取btn

//        UIButton *btn = self.subviews[i];

//

//        //设置按钮的frm

//        btn.frame = CGRectMake(btnW * i, 0, btnW, btnH);

//

//    }

for (UIButton *btn in self.subviews) {

CGFloat btnIntX = (btnW+20) * btn.tag + initialX;

btn.frame = CGRectMake(btnIntX, 10.0, btnW, btnH);

}

}

-(void)btnClick:(UIButton *)btn{

//一点击通知代理

if ([self.delegate respondsToSelector:@selector(tabbar:didSelectedFrom:to:)]) {

[self.delegate tabbar:self didSelectedFrom:self.selectedBtn.tag to:btn.tag];

}

//#warning 开发过程,首先针对64位开发,苹果开发的应用上架,必需支持64位

//    NSLog(@"%ld",btn.tag);

//

//取消之前选中

self.selectedBtn.selected = NO;

//设置当前选中

btn.selected = YES;

self.selectedBtn = btn;

}

@end

//实现自定义的btn

@implementation CZTabbarButton

//图片高亮时候会调用这个方法

-(void)setHighlighted:(BOOL)highlighted{

//    NSLog(@"%s",__func__);

//只要不调用父类的方法,按钮就不会有高度的效果

//[super setHighlighted:highlighted];

}

@end

自定义的TabBar的使用

#import

@interface MainViewController : UITabBarController

@end

#import "MainViewController.h"

@interface MainViewController ()

@end

@implementation MainViewController

- (void)viewDidLayoutSubviews{

//    NSLog(@"%s",__func__);

//此方法在创建每个子View时都会调用,此类中调用两次,下方代码只需要一次

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

CGRect frame = CGRectMake(0

, self.tabBar.frame.origin.y-41

, self.tabBar.frame.size.width

, 90);

self.tabBar.frame = frame;

WDYTabbar *wDYTabbar = [[WDYTabbar alloc] initWithFrame:self.tabBar.bounds];

//添加五个按钮

[wDYTabbar addTabbarBtnWithNormalImg:@"lights0" selImg:@"lights1"];

[wDYTabbar addTabbarBtnWithNormalImg:@"aircon0" selImg:@"aircon1"];

[wDYTabbar addTabbarBtnWithNormalImg:@"service0" selImg:@"service1"];

[wDYTabbar addTabbarBtnWithNormalImg:@"setting0" selImg:@"setting1"];

//设置代理

wDYTabbar.delegate = self;

//把自定义的tabbar添加到 系统的tabbar上

[self.tabBar addSubview:wDYTabbar];

});

}

此处的方法可参照修改UITabBarController的Tabbar高度

同样下方有完整截图

自定义的TabBar,WDYTabbar.h截图


ios 自定义UITabBarController的TabBar_第1张图片

自定义的TabBar,WDYTabbar.m截图


ios 自定义UITabBarController的TabBar_第2张图片
ios 自定义UITabBarController的TabBar_第3张图片
ios 自定义UITabBarController的TabBar_第4张图片
ios 自定义UITabBarController的TabBar_第5张图片

自定义的TabBar的使用


ios 自定义UITabBarController的TabBar_第6张图片
ios 自定义UITabBarController的TabBar_第7张图片
ios 自定义UITabBarController的TabBar_第8张图片
ios 自定义UITabBarController的TabBar_第9张图片
ios 自定义UITabBarController的TabBar_第10张图片

如有不懂的可以留言&私信

你可能感兴趣的:(ios 自定义UITabBarController的TabBar)