## 一:效果圖
自定義tabBar實現最下面中間的添加按鈕?

## 二:思路
首先在自己的tabBarController中把系統的tabBar設置成自己的tabBar(NYTabBar),這里由于tabBar的屬性是readonly的,所以我們要用kvc或者是消息管理來設置他
然后就寫自己的NYTabBar。這個寫起來首先 遍歷當前tabBar上的所有view,如果是UITabBarButton,就取出來重新設置他們的位置,并且重新賦值,接下來就是空出中間的添加的位置,然后把添加按鈕放上去,就ok了。
## 三:代碼
### 調用
首先是如何調用的代碼
~~~
//自定義tabBar
NYTabBar *tabBar = [[NYTabBar alloc]initWithFrame:self.tabBar.frame];
//用kvc把readly的tabBar屬性改成自定義的
[self setValue:tabBar forKey:@"tabBar"];
~~~
### NYTabBar.m
NYTabBar.h文件就不寫了 ,里面啥都沒有
NYTabBar.m:
~~~
//
// NYTabBar.m
// 貓貓微博
//
// Created by apple on 15-7-24.
// Copyright (c) 2015年 znycat. All rights reserved.
//
#import "NYTabBar.h"
@interface NYTabBar()
/**
* 添加增加按鈕
*/
@property (nonatomic, weak) UIButton *addButton;
@end
@implementation NYTabBar
-(UIButton *)addButton
{
if (_addButton == nil) {
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setImage:[UIImage imageNamed:@"tabbar_compose_icon_add"] forState:UIControlStateNormal];
[btn setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button"] forState:UIControlStateNormal];
[btn setImage:[UIImage imageNamed:@"tabbar_compose_icon_add_highlighted"] forState:UIControlStateHighlighted];
[btn setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button_highlighted"] forState:UIControlStateHighlighted];
_addButton = btn;
//是按鈕的尺寸默認跟背景圖片一樣大
[btn sizeToFit];
[self addSubview:_addButton];
}
return _addButton;
}
//調整子空間的位置
-(void)layoutSubviews
{
[super layoutSubviews];
CGFloat w = self.bounds.size.width;
CGFloat h = self.bounds.size.height;
CGFloat btnX = 0;
CGFloat btnY = 0;
CGFloat btnW = w / 5;
CGFloat btnH = h;
int i = 0;
//1 , 遍歷當前tabBar上的所有view
for (UIView *tabBarBtn in self.subviews) {
//2,如果是UITabBarButton,就取出來重新設置他們的位置
if ([tabBarBtn isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
btnX = i * btnW;
tabBarBtn.frame = CGRectMake(btnX, btnY, btnW, btnH);
//當到了第二個時候,再加一個位置空竹添加按鈕的位置。
if (i==1) {
i++;
}
i++;
}
}
//設置添加按鈕 add按鈕的位置
self.addButton.center = CGPointMake(w * 0.5, h * 0.5);
}
@end
~~~
## 四:補充
調用的時候還可以用消息管理
~~~
//自定義tabBar
NYTabBar *tabBar = [[NYTabBar alloc]initWithFrame:self.tabBar.frame];
/*這個地方還有一種用消息管理設置的,這樣也可以,使用個步驟是
1:先導入頭文件#import <objc/message.h>
2:到項目中Build Settings中查找msg ,然后把yes改成no
3:代碼寫objc_msgSend調用就行了
注意:這樣的方法框架中比較多,目的為了不讓人看懂,還有顯得c牛逼,——————沒啥鳥用。。
*/
//用消息管理設置
objc_msgSend(self, @selector(setTabBar:),tabBar);
~~~
步驟:?
1:先導入頭文件
~~~
#import <objc/message.h>
~~~
2:到項目中Build Settings中查找msg ,然后把yes改成no

3:代碼寫objc_msgSend調用就行了?
注意:這樣的方法框架中比較多,目的為了不讓人看懂,還有顯得c牛逼,——————沒啥鳥用。。
- 前言
- (1)微博主框架-子控制器的添加
- (2)微博主框架-自定義導航控制器NavigationController
- (3)微博主框架-UIImage防止iOS7之后自動渲染_定義分類
- (4)微博自定義tabBar中間的添加按鈕
- (5)微博自定義搜索框searchBar
- (6)導航控制器NavigationController 的滑動回退功能實現
- (7)程序啟動新特性用UICollectionViewController實現
- (8)用AFNetworking和SDWebImage簡單加載微博數據
- (9)微博模型之時間相關重要操作,判斷剛剛,昨天,今年等等
- (10)微博cell中圖片的顯示以及各種填充模式簡介
- (11)發送微博自定義TextView實現帶占位文字
- (12)發送微博自定義工具條代理實現點擊事件
- (13)發送微博調用相機里面的圖片以及調用相機