一夺溢、分欄控制器的基本概念(分欄控制器也是一個容器)
1懦胞、UITabBarController和UINavigationController一樣是用來管理試圖控制器的
2退唠、與導(dǎo)航控制器不同葬燎,tabBarController控制器使用數(shù)組管理子試圖控制器的,并且子試圖之間是平等關(guān)系拌汇,導(dǎo)航控制器所管理的試圖控制器之間是在出桟和入桟的關(guān)系
二柒桑、分欄試圖控制器的結(jié)構(gòu)
1、有兩部分組成
1)contentView:顯示當(dāng)前controller的view
2) tabBar(標(biāo)簽欄):負(fù)責(zé)切換顯示controller, 高度為49(相對于NavigationBar的優(yōu)勢在于可以使用戶選擇明確)
2噪舀、tabBar(標(biāo)簽欄)
1) 標(biāo)簽欄是唯一的魁淳,就好比導(dǎo)航控制器的導(dǎo)航欄(Bar欄)
2) .給分欄控制器和子控制器設(shè)置顏色 barTintColor
(1)分欄控制器和子控制器設(shè)置顏色
UITabBarController *tabBarC = [[UITabBarController alloc]init];//先創(chuàng)建分欄控制器,在給它設(shè)置顏色
tabBarC.tabBar.barTintColor = [UIColor orangeColor];
(2)子控制器設(shè)置顏色
self.tabBarController.tabBar.tintColor = [UIColor redColor]; //改變的是選中狀態(tài)是下面字體和小圖標(biāo)的顏色
3) 設(shè)置分欄的背景圖片
backgroundImage//首先要有一個分欄控制器的對象
tabBarC.tabBar.backgroundImage = [UIImage imageNamed:@"tupian"];
4)標(biāo)簽欄的顯示與隱藏
hidden
tabBarC.tabBar.hidden = YES;//前提也是有一個分欄控制器的對象
5)設(shè)置導(dǎo)航控制器默認(rèn)顯示的控制器( 默認(rèn)界面顯示數(shù)組里面第一個 下表為0的控制器的界面)
selectedIndex
tabBarC.selectedIndex = 2;//數(shù)組里面的第三個
3与倡、tabBarItem
1) 用來控制一組控制器的切換界逛,類似選項卡,每個Tab控制一個試圖控制器纺座,點擊哪個tab就顯示對應(yīng)的試圖控制器息拜,當(dāng)前的試圖控制器
2) 每個tabBarItem都可以設(shè)置title、image/selectedImages、badgeValue
例如:
(1).給當(dāng)前的分欄控制器的item設(shè)置一個標(biāo)題
self.tabBarItem.title = @"我的";
(2).給當(dāng)前的分欄控制器的item設(shè)置一個圖片
self.tabBarItem.image = [UIImage imageNamed:@"tab_buddy_nor@2x"];
(3).給當(dāng)前的分欄控制器的item設(shè)置一個選中狀態(tài)的圖片
self.tabBarItem.selectedImage = [UIImage imageNamed:@"tab_me_nor@2x"];//@2x表示給高清屏 30*30的效果好
self.tabBarItem.badgeValue = @"new";//在小圖標(biāo)的上面家字體加字體
3) 設(shè)置選中的顏色
分欄控制器.tabBar.tintColor
self.tabBarController.tabBar.tintColor = [UIColor redColor];
3) TabBar只能顯示五個tab Item该溯,如果超過五個則會自動生成個Morede 標(biāo)簽顯示剩余的Tab,這些Tab可以通過編輯顯示在UITabBar上(打開頁面后自動顯示在界面岛抄,點擊tabBar右邊)
4) 自定義Item
[UITabBarItem alloc]initWithTitle: image: tag:
[UITabBarItem alloc]initWithTabBarSystemItem:tag:
4别惦、支持國際化(上面在多個視圖控制器狈茉,可以在編輯那里改變字體的顏色)
1)找到plist文件
2)右鍵 add row
3)Localizations 默認(rèn)就一個ENGLISH
4)在 添加一個 Item 1 Chinese (simplified)
三、代理監(jiān)聽分欄控制器的切換
1掸掸、視圖將要切換時調(diào)用氯庆,viewController為將要顯示的控制器,如果返回的值為NO扰付,則無法點擊其它分欄了(viewController指代將要顯示的控制器)
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
例如1:
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
NSLog(@"被選中的控制器將要顯示的按鈕");
//return NO;不能顯示選中的控制器
return YES;
}
2堤撵、視圖已經(jīng)切換后調(diào)用,viewController 是已經(jīng)顯示的控制器
- (void)tabBarController:(UITabBarController *)tabBarControllerdidSelectViewController:(UIViewController *)viewController
例如2:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
NSLog(@"視圖顯示后調(diào)用");
}
3羽莺、將要開始自定義item的順序
- (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers
例如3
- (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers
{
NSLog(@"將要開始自定義item時調(diào)用");
NSLog(@"%@",viewControllers);
}
4实昨、將要結(jié)束自定義item的順序
- (void)tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers changed:(BOOL)changed
例如4
- (void)tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers changed:(BOOL)changed
{
NSLog(@"將要結(jié)束自定義item時調(diào)用");
NSLog(@"%@",viewControllers);
}
5、結(jié)束自定義item的順序
- (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers changed:(BOOL)changed
例如5:
- (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers changed:(BOOL)changed
{
NSLog(@"已經(jīng)結(jié)束自定義item順序時調(diào)用");
NSLog(@"%@",viewControllers);
}
四盐固、集成分欄控制器和導(dǎo)航控制器
1荒给、在Tab Bar控制器中某一個Tab中使用Navigation控制器,這是最常見的用法
2、在一個Navigation控制器控制下的某一個或某些控制器是Tab Bar控制器刁卜,這時對該Tab Bar控制器的壓入和彈出方法和普通視圖控制器一樣(上節(jié)課講解的四種方法)
五志电、總結(jié)
1、UINavigationController蛔趴、UITabBarController和UIViewController通常都是組合出現(xiàn)的挑辆,一定要熟練使用
2、UINavigationController孝情、UITabBarController都是UIViewController的子類鱼蝉,管理的都是UIViewContrller
3、UINavigationController可以嵌套UITabBarController
4箫荡、UITabBarController可以嵌套UINavigationController
六.感悟
不管是UINavigationController還是UITabBarController都是容器魁亦,都主要要一個界面去顯示它(也叫作根控制器)