//
// MyTabBar.h// 新浪微博
//
// Created by jose on 15-3-17.
// Copyright (c) 2015年 jose. All rights reserved.
//
#import <UIKit/UIKit.h>
//代理
@class MyTabBar;
@protocol MyTabBarDelegate<NSObject>
//实现plus响应的方法
-(void)PlusBtnClick:(MyTabBar *)tabBar;
@end
@interface MyTabBar : UITabBar
@property(nonatomic,weak)id<MyTabBarDelegate>delegate;
@end
*************************************************************************************************************************
**************************************************************************************************************************
*************************************************************************************************************************
实现文件:
//
// MyTabBar.m
// 新浪微博
//
// Created by jose on 15-3-17.
// Copyright (c) 2015年 jose. All rights reserved.
//
#import "MyTabBar.h"
#import "UIView+Extension.h"
@interface MyTabBar()
//添加一个plus按钮控件
@property(nonatomic,weak)UIButton *PlusButton;
@end
@implementation MyTabBar
//调用init会先初始化这个方法
-(id)initWithFrame:(CGRect)frame{
self=[super initWithFrame:frame];
if (self) {
[self SetplusBtn];
}
return self;
}
//布局子控件
-(void)layoutSubviews{
[super layoutSubviews];
//设置plus的frame
[self SetPlusBtnFrame];
//设置所有的tab的frame
[self SetAllTabBtn];
}
//设置plus按钮
-(void)SetplusBtn{
UIButton *Plusbtn=[[UIButton alloc]init];
[Plusbtn addTarget:self action:@selector(PlusClick) forControlEvents:UIControlEventTouchUpInside];
[Plusbtn setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button@2x"] forState:UIControlStateNormal];
[Plusbtn setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button_highlighted@2x"] forState:UIControlStateHighlighted];
[Plusbtn setImage:[UIImage imageNamed:@"tabbar_compose_icon_add_highlighted@2x"] forState:UIControlStateNormal];
[Plusbtn setImage:[UIImage imageNamed:@"tabbar_compose_background_icon_add@2x"] forState:UIControlStateHighlighted];
[self addSubview:Plusbtn];
self.PlusButton=Plusbtn;
}
//plus点击事件的代理
-(void)PlusClick{
if([self.delegate respondsToSelector:@selector(PlusBtnClick:)]) {
[self.delegate PlusBtnClick:self];
}
}
//设置plus按钮的frame
-(void)SetPlusBtnFrame{
//设置plus按钮的frame和中心坐标
self.PlusButton.size=self.PlusButton.currentBackgroundImage.size;
self.PlusButton.center=CGPointMake(self.width/2, self.height/2);
}
/**
* 设置每一个btn的frame
*
* @param tabbarbtn 要设置的按钮
* @param index 索引值
*/
-(void)SetTabbarBtnFrame:(UIView *)tabbarbtn Index:(NSInteger)index{
//计算按钮的尺寸
CGFloat btnw=self.width/(self.items.count+1);
CGFloat btnh=self.height;
tabbarbtn.width=btnw;
tabbarbtn.height=btnh;
if (index>=2) {
//计算中间按钮右边的位置
tabbarbtn.x=btnw*(index+1);
}
else{
//计算中间按钮左边的位置
tabbarbtn.x=btnw*index;
}
tabbarbtn.y=0;
}
/**
* 设置tabbtn文字的颜色
*
* @param tabbtn 按钮
* @param index 索引
*/
/***
-(void)SetBtnColor:(UIView *)tabbtn Index:(NSInteger)index{
//获取当前选中的index
NSInteger seletindex=[self.items indexOfObject:self.selectedItem];
for (UILabel *label in tabbtn.subviews) {
if (![label isKindOfClass:[UILabel class]])
continue;
label.font=[UIFont systemFontOfSize:10];
if (seletindex==index) {
//设置文字颜色
label.textColor=[UIColor orangeColor];
}
else{
label.textColor=[UIColor blackColor];
}
}
}
**/
//设置底部所有菜单栏按钮
-(void)SetAllTabBtn{
NSInteger index=0;
for (UIView *tabbtn in self.subviews) {
//使用NSClassFromString来判断是否属于这个类
if (![tabbtn isKindOfClass:NSClassFromString(@"UITabBarButton")])
//跳出for循坏语句
continue;
[self SetTabbarBtnFrame:tabbtn Index:index];
// [self SetBtnColor:tabbtn Index:index];
//索引自增
index++;
}
}
@end
*************************************************************************************************
****************************************************************************************************
*******************************************************************************************************
使用方法:
//使用自定义tab
MyTabBar *tab=[[MyTabBar alloc]init];
//设置代理(监听控制器的切换, 控制器一旦切换了子控制器,就会调用代理的(tabBarController:didSelectViewController:)的方法
tab.delegate=self;
//取代系统的tabBar,kvc修改系统的taBbar
[self setValue:tab forKeyPath:@"tabBar"];
//实现代理的方法
-(void)PlusBtnClick:(MyTabBar *)tabBar{
UIViewController *root=[[UIViewController alloc]init];
root.view.backgroundColor=[UIColor grayColor];
//[self.navigationController pushViewController:root animated:YES];
[self presentViewController:root animated:YES completion:nil];
}