ios 自定義UITabBarController的TabBar

原理:TabBar本身是一個View会油,自定義一個繼承TabBar的uiview锌仅,然后替換掉原來的TabBar

下面直接上代碼,直接復(fù)制的代碼穿铆,可能出現(xiàn)錯誤,最下方有截圖

自定義的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;

/**

* 傳普通狀態(tài)和選中狀態(tài)的圖片悴务,內(nèi)部就幫你添加一個按鈕

*/

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

@end

//自定義按鈕睹限,主要是為了去掉Tabbar按鈕的高亮狀態(tài)

@interface CZTabbarButton : UIButton

@end

自定義的TabBar譬猫,WDYTabbar.m文件

#import "WDYTabbar.h"

@interface WDYTabbar ()

/**

* 當(dāng)前選中的按鈕

*/

@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];

//監(jiān)聽事件

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

//綁定tag

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

btn.tag = self.subviews.count;

[self addSubview:btn];

//設(shè)置默認選中

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];

//

//? ? ? ? //設(shè)置按鈕的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 開發(fā)過程,首先針對64位開發(fā)染服,蘋果開發(fā)的應(yīng)用上架别洪,必需支持64位

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

//

//取消之前選中

self.selectedBtn.selected = NO;

//設(shè)置當(dāng)前選中

btn.selected = YES;

self.selectedBtn = btn;

}

@end

//實現(xiàn)自定義的btn

@implementation CZTabbarButton

//圖片高亮?xí)r候會調(diào)用這個方法

-(void)setHighlighted:(BOOL)highlighted{

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

//只要不調(diào)用父類的方法,按鈕就不會有高度的效果

//[super setHighlighted:highlighted];

}

@end

自定義的TabBar的使用

#import

@interface MainViewController : UITabBarController

@end

#import "MainViewController.h"

@interface MainViewController ()

@end

@implementation MainViewController

- (void)viewDidLayoutSubviews{

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

//此方法在創(chuàng)建每個子View時都會調(diào)用柳刮,此類中調(diào)用兩次挖垛,下方代碼只需要一次

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"];

//設(shè)置代理

wDYTabbar.delegate = self;

//把自定義的tabbar添加到 系統(tǒng)的tabbar上

[self.tabBar addSubview:wDYTabbar];

});

}

此處的方法可參照修改UITabBarController的Tabbar高度

同樣下方有完整截圖

自定義的TabBar,WDYTabbar.h截圖


自定義的TabBar秉颗,WDYTabbar.m截圖


自定義的TabBar的使用


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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末痢毒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蚕甥,更是在濱河造成了極大的恐慌哪替,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件菇怀,死亡現(xiàn)場離奇詭異凭舶,居然都是意外死亡,警方通過查閱死者的電腦和手機爱沟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門帅霜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人呼伸,你說我怎么就攤上這事身冀。” “怎么了括享?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵闽铐,是天一觀的道長。 經(jīng)常有香客問我奶浦,道長兄墅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任澳叉,我火速辦了婚禮隙咸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘成洗。我一直安慰自己五督,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布瓶殃。 她就那樣靜靜地躺著充包,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上基矮,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天淆储,我揣著相機與錄音,去河邊找鬼家浇。 笑死本砰,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的钢悲。 我是一名探鬼主播点额,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼莺琳!你這毒婦竟也來了还棱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤惭等,失蹤者是張志新(化名)和其女友劉穎诱贿,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咕缎,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡珠十,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了凭豪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片焙蹭。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嫂伞,靈堂內(nèi)的尸體忽然破棺而出孔厉,到底是詐尸還是另有隱情,我是刑警寧澤帖努,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布撰豺,位于F島的核電站,受9級特大地震影響拼余,放射性物質(zhì)發(fā)生泄漏污桦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一匙监、第九天 我趴在偏房一處隱蔽的房頂上張望凡橱。 院中可真熱鬧,春花似錦亭姥、人聲如沸稼钩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坝撑。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間巡李,已是汗流浹背抚笔。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留击儡,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓蝠引,卻偏偏與公主長得像阳谍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子螃概,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容