如果我们想用系统的tabar 又想自定义的怎么办?
我们可以有多中方法实现
一种方法可以继承UIVIew 这样tababar 的所有内容都是自定义 我们可以实现我们想要的效果
第二种我们继承自UITabBar
重写- (void)layoutSubviews 方法 可以实现自定义
这里要注意我们应该先调用 [super layoutSubviews];
父类的方法 然后对tabbar 进行布局
否则修改无效 系统还会调用layoutSubviews方法 覆盖我们修改的内容
#import <UIKit/UIKit.h>
@class QHTabBar;
#warning 因为QHTabbar 继承自UITabbar 所以成为QHTabbar的代理 也必须实现UITabBar的代理协议
@protocol QHTabBarDelegate <UITabBarDelegate>
@optional
- (void)tabBarDidClickPlusButton:(QHTabBar *)tabbar;
@end
@interface QHTabBar : UITabBar
@property(nonatomic,weak)id<QHTabBarDelegate>delegate;
@end
#import "QHTabBar.h"
@interface QHTabBar()
@property(nonatomic,weak)UIButton *plusBtn;
@end
@implementation QHTabBar
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
//添加一个 按钮到tabbar 中
UIButton *plusBtn = [[UIButton alloc]init];
[plusBtn setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button"]forState:UIControlStateNormal];
[plusBtn setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button_highlighted"] forState:UIControlStateHighlighted];
[plusBtn setImage:[UIImage imageNamed:@"tabbar_compose_icon_add"] forState:UIControlStateNormal];
[plusBtn setImage:[UIImage imageNamed:@"tabbar_compose_icon_add_highlighted"] forState:UIControlStateHighlighted];
plusBtn.size = plusBtn.currentBackgroundImage.size;
[plusBtn addTarget:self action:@selector(plusClick) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:plusBtn];
self.plusBtn = plusBtn;
}
return self;
}
- (void)plusClick
{
//通知代理
if([self.delegate respondsToSelector:@selector(tabBarDidClickPlusButton:)])
{
[self.delegate tabBarDidClickPlusButton:self];
}
}
- (void)layoutSubviews
{
#warning [super layoutSubviews]; 一定要调用
[super layoutSubviews];
//1.设置加号的位置
self.plusBtn.centerX = self.width *0.5;
self.plusBtn.centerY =self.height *0.5;
//2.设置其他tabbarButton 的位置和尺寸
CGFloat tabbarButtonW = self.width/5;
CGFloat tabbarButtonindex = 0;
NSInteger count = self.subviews.count;
for (int i = 0; i < count; i++) {
UIView *child = self.subviews[i];
Class class = NSClassFromString(@"UITabBarButton");
if ([child isKindOfClass:class]) {
//设置宽度
child.width = tabbarButtonW;//self.width/count;
//设置x
child.x = tabbarButtonindex * tabbarButtonW;
//增加索引
tabbarButtonindex++;
if (tabbarButtonindex == 2) {
tabbarButtonindex++;
}
}
}
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/
@end