UITabBarController是IOS中很常用的一個viewController。UITabBarController通常作為整個程序的rootViewController,而且不能添加到別的container viewController中。可以輕松地管理多個控制器,輕松完成控制器之間的切換,典型的例子就是QQ、微信、微博等應?。
?.創建
在storyboard中的模擬我們就不多說了,直接進入直接代碼的編寫。(模擬微博的tabBarController進行編寫)
我們選擇在ApplicationDelegate中的 applicationDidFinishLaunching:方法中進行創建,因為前面已經說到了UITabBarController作為整個程序的rootViewController,并且要在顯示程序的windows之前創建好。具體的創建步驟:
(1)初始化UITabBarController
(2)設置UIWindow的rootViewController為UITabBarController
(3)創建相應的子控制器(viewcontroller)
(4)把子控制器添加到UITabBarController
eg:
//創建TabBarControllor
CustomTabBarController *tabBarController = [[CustomTabBarController alloc] init];
tabBarController.tabBar.tintColor = [UIColor orangeColor];
//設置窗口的根視圖控制器
self.window.rootViewController = tabBarController;
//創建tabBar上管理的每個界面
//1.創建主頁
HomeViewController *homeVC = [[HomeViewController alloc] init];
homeVC.view.backgroundColor = [UIColor whiteColor];
。。。。。。
//將創建的homeVC添加到tabBarController上
tabBarController.viewControllers = @[homeVC, msgVC, discoverVC, profileVC]; //viewControllers實際上就是一個數組,只需要把想傳進去的viewController放進這個數組就可以了
注意:展示的順序和添加的順序一致,和導航控制器中不同,展現在眼前的是第一個添加的控制器對應的View。
實際效果:
?.UITabBar
下方的工具條稱為UITabBar ,如果UITabBarController有N個子控制器,那么UITabBar內部就會有N 個UITabBarButton作為子控件與之對應。
這里值得一提的是:UITabBarButton在UITabBar中得位置是均分的,UITabBar的默認高度為49,并且沒有辦法更改。
?.UITabBarItem****
UITabBar上面顯示的每一個Tab都對應著一個ViewController,我們可以通過設置viewcontroller.tabBarItem屬性來改變tabbar上對應的tab顯示內容。否則系統將會根據viewController的title自動創建一個,該tabBarItem只顯示文字,沒有圖像。
eg:
homeVC.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"主頁" image:[UIImage imageNamed:@"tabbar_home"] selectedImage:[[UIImage imageNamed:@"tabbar_home_selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
?.在UITabBar中間添加一個btn
這個方法會在以下的情況下自動調用,如果想要手動調用的話應該調用『layoutIfNeeded』:
.一個視圖A被添加到另外一個視圖B
.一個視圖的frame改變
1 - (void)layoutSubviews{
2 [super layoutSubviews];
3
4 CGFloat avgWidth = self.frame.size.width / 5;
5
6 NSInteger index = 0;
7 for (UIView *item in self.subviews) {
8 if ([item isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
9 item.frame = CGRectMake(index * avgWidth, item.frame.origin.y, avgWidth, item.frame.size.height);
10
11 index++;
12 if (index == 2) {
13 _addBtn.frame = CGRectMake(index * avgWidth, 3, avgWidth, 44);
14 [self addSubview:_addBtn];
15 index++;
16 }
17 }
18 }
19 }