1. 基本概念
-
與導(dǎo)航控制器區(qū)別
導(dǎo)航控制器:有層次區(qū)別
分欄控制器:平行關(guān)系
屏幕快照 2016-11-30 上午9.42.22.png
-
常用關(guān)鍵字
屏幕快照 2016-11-30 上午9.45.45.png
2. 基本實現(xiàn)
為了手動創(chuàng)建分欄控制器,還是先把原有的ViewController.h和ViewController.m 還有mainstoryboard文件刪除。
創(chuàng)建三個視圖控制器:

在APPDelegate中添加代碼,創(chuàng)建window,并創(chuàng)建三個視圖對象和分欄控制器對象:
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3d1d81}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px}p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #703daa}p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px 'Heiti SC Light'; color: #008400}p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #bb2ca2}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s4 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s5 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s6 {font: 11.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures}span.s7 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s8 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s9 {font: 11.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s10 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures; color: #000000}span.s11 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
self.window=[[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
[self.window makeKeyAndVisible];
//創(chuàng)建控制器一
VCFirst* vcFirst = [[VCFirst alloc]init];
vcFirst.view.backgroundColor=[UIColor blueColor];
vcFirst.title=@"視圖1";
//創(chuàng)建控制器二
VCSecond* vcSecond=[[VCSecond alloc]init];
vcSecond.view.backgroundColor=[UIColor yellowColor];
vcSecond.title=@"視圖二";
//創(chuàng)建控制器三
VCThird* vcThird=[[VCThird alloc]init];
vcThird.view.backgroundColor=[UIColor orangeColor];
vcThird.title=@"視圖三";
//創(chuàng)建分欄控制器對象
UITabBarController* tbController=[[UITabBarController alloc]init];
//創(chuàng)建一個控制器數(shù)組對象
//將所有要被分欄控制器管理的對象添加到數(shù)組中
NSArray* arrayVC= [NSArray arrayWithObjects:vcFirst,vcSecond,vcThird,nil];
//賦給管理數(shù)組
tbController.viewControllers=arrayVC;
//將分欄控制器作為根視圖的控制器
self.window.rootViewController=tbController;
return YES;
}
分欄控制器對于視圖的管理是通過視圖數(shù)組完成的,分欄控制器的標(biāo)簽就是視圖的Title
實現(xiàn)的效果:



</br>
我們可以在添加一些屬性:
- 使一打開就直接顯示第三個視圖
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px 'Heiti SC Light'; color: #008400}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}span.s1 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures; color: #000000}span.s2 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures}span.s4 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s5 {font-variant-ligatures: no-common-ligatures; color: #272ad8}
//設(shè)置選中的視圖控制器的索引
//實際是通過索引來確定顯示哪個控制器
tbController.selectedIndex=2;
- 設(shè)置tabBar外觀
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px 'Heiti SC Light'; color: #008400}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #703daa}span.s1 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font: 11.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures}span.s4 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s5 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s6 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures; color: #000000}span.s7 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s8 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}
//設(shè)置透明度
tbController.tabBar.translucent=NO;
//改變工具欄顏色
tbController.tabBar.barTintColor=[UIColor redColor];
//改變按鈕文字顏色
tbController.tabbat.tintColor=[UIColor blueColor];
- 改變按鈕內(nèi)容
方法一:在VCFirst.m中創(chuàng)建一個分欄按鈕對象
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px 'Heiti SC Light'; color: #008400}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}span.s1 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures; color: #000000}span.s2 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures}span.s4 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s5 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s6 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s7 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s8 {font-variant-ligatures: no-common-ligatures; color: #272ad8}
//創(chuàng)建一個分欄按鈕對象
UITabBarItem* tabBarItem=[[UITabBarItem alloc]initWithTitle:@"111" image:nil tag:101];
self.tabBarItem=tabBarItem;```
**注**要把title設(shè)置放在backgroundcolor前,才能加載出title。

方法二:根據(jù)系統(tǒng)風(fēng)格創(chuàng)建按鈕
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px 'Heiti SC Light'; color: #008400}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3d1d81}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}span.s1 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures; color: #000000}span.s2 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures}span.s4 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s5 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s6 {font-variant-ligatures: no-common-ligatures; color: #272ad8}span.s7 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s8 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}
//根據(jù)系統(tǒng)風(fēng)格創(chuàng)建
UITabBarItem* tabBarItem=[[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemContacts tag:101];
//按鈕右上角信息
//通常用小紅點來提示未讀信息
tabBarItem.badgeValue=@"22";
self.tabBarItem=tabBarItem;
實現(xiàn)效果:

#### 3. 分欄控制器的協(xié)議函數(shù)

如果我們添加足夠多的視圖,比如六個,出現(xiàn)的結(jié)果是系統(tǒng)自動創(chuàng)建一個More:


**點擊Edit可以用拖拽實現(xiàn)按鈕重新排布**
</br>
##### 協(xié)議函數(shù)
首先在AppDelegate.h中添加繼承:
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #703daa}span.s1 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s2 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s3 {font-variant-ligatures: no-common-ligatures}
@interface AppDelegate : UIResponder <UIApplicationDelegate,UITabBarControllerDelegate>
然后在AppDelegate.m的BOOL函數(shù)中創(chuàng)建一個協(xié)議:
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s3 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}
tbController.delegate=self;
在函數(shù)外去實現(xiàn):
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px 'Heiti SC Light'; color: #008400}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d12f1b}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s4 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s5 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s6 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s7 {font: 11.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s8 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s9 {font: 11.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures}
//開始編輯前調(diào)用
-(void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray *)viewControllers
{
NSLog(@"編輯前");
}
//即將結(jié)束前
-(void)tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed
{
NSLog(@"即將結(jié)束前");
}
//已經(jīng)結(jié)束
-(void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed
{
NSLog(@"已經(jīng)結(jié)束");
NSLog(@"vc=%@",viewControllers);
}
//選中控制器對象
-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
if(tabBarController.viewControllers[tabBarController.selectedIndex]==viewController)
{
NSLog(@"ok");
}
NSLog(@"選中控制器對象");
}
可以做的事情:
1. 得到調(diào)整后的數(shù)組
2. 得到選中的視圖index

