分欄控制器

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)建三個視圖控制器:

屏幕快照 2016-11-30 上午9.59.32.png

在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)的效果:

屏幕快照 2016-11-30 上午9.58.57.png
屏幕快照 2016-11-30 上午9.59.03.png
屏幕快照 2016-11-30 上午9.59.08.png

</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。

![屏幕快照 2016-11-30 上午10.14.59.png](http://upload-images.jianshu.io/upload_images/3281836-c559bdd3a33089f3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  方法二:根據(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)效果:

![屏幕快照 2016-11-30 上午10.19.49.png](http://upload-images.jianshu.io/upload_images/3281836-0ce1d0885b80ac53.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


#### 3. 分欄控制器的協(xié)議函數(shù)
![屏幕快照 2016-11-30 上午10.24.22.png](http://upload-images.jianshu.io/upload_images/3281836-c358fe3d536702f9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

![屏幕快照 2016-11-30 上午10.31.57.png](http://upload-images.jianshu.io/upload_images/3281836-5fccf4e5545b2758.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)



![屏幕快照 2016-11-30 上午10.33.16.png](http://upload-images.jianshu.io/upload_images/3281836-73816ef9782dd9cb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

**點擊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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容