1.UITabBarController:和UINavigationController類似,也可以輕鬆管理多個控制器,輕鬆完成空間之間的轉換。 2.UITabBarController的使用: (1)使用步驟: <1>初始化UITabBarController
1.UITabBarController:和UINavigationController類似,也可以輕鬆管理多個控制器,輕鬆完成空間之間的轉換。
2.UITabBarController的使用:
(1)使用步驟:
<1>初始化UITabBarController
<2>設置UIWindow的rootViewController為UITabBarController
<3>創建相應的子控制器(viewController)
<4>把子控制器添加到UITabBarController
(2)代碼演示:
3.重要說明:
(1)UITabBar:視圖控制器裡面包含了一個tabbar的控制項(即下方的工具條),如果UITAbBar有N個控制器,那麼UITabBar內部就會有N個UITabBarButton作為子控制項與之對應(預設使用的UITabBarButton在UITabBar中的位置是均分的,UITabBar的高度是49)。如果控制項數多於5個,就會在TabBar的右端產生一個“More”,把前面4個顯示出來,之後的在“More”中,位置是可以交換的。
(2)UITabBarButton:UITabBarButton裡面顯示什麼內容,由對應的子控制器中TabBarItem屬性來決定
(3)向TabBarController中添加子控制器的兩種方法:
如果 tabBarC.selectedIndex = 1; 則設置第二個視圖為預設選項卡
4.如果使用系統給定樣式:
<1>通過在UITabBarItem初始化時調用- (instancetype)initWithTabBarSystemItem:(UITabBarSystemItem)systemItemtag:(NSInteger)tag; 方法可以設置標簽項目。
<2>系統標簽項目列表:
typedefNS_ENUM(NSInteger, UITabBarSystemItem) {
UITabBarSystemItemMore, 當標簽條中的圖片數超過5個時會顯示此標簽,點擊此標簽會顯示未顯示的圖標
UITabBarSystemItemFavorites, 個人收藏內容
UITabBarSystemItemFeatured, 程式推薦內容
UITabBarSystemItemTopRated, 評價高的內容
UITabBarSystemItemRecents, 最近訪問的內容
UITabBarSystemItemContacts, 通訊錄界面
UITabBarSystemItemHistory, 歷史記錄內容
UITabBarSystemItemBookmarks, 書簽內容
UITabBarSystemItemSearch, 搜索界面
UITabBarSystemItemDownloads, 下載中/下載完成的內容
UITabBarSystemItemMostRecent, 最新內容
UITabBarSystemItemMostViewed, 人氣最高的內容
};
5.標簽欄屬性
6.自定義標簽欄
//1. 在視圖將要顯示的時候,將tabBar原生的button去除 - (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; for (UIView *view in self.tabBar.subviews) { if ([view isKindOfClass:NSClassFromString(@"UITabBarButton")]) { [view removeFromSuperview]; } } } //2.創建自定義的tabBar - (void)viewDidLoad { [super viewDidLoad]; _newTabBar.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 49); [self.tabBar addSubview:_newTabBar]; } //3.覆寫下麵方法,添加自定義的control - (void)setViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers{ //目的是告訴系統需要創建的controller數量 [super setViewControllers:viewControllers]; //自定義controller [self creatNewControllerWithSelectImageName:SelectImageName]; } - (void)creatNewControllerWithSelectImageName:(NSString *)selectImageName { //創建的control的寬度 CGFloat controlWidth = [UIScreen mainScreen].bounds.size.width/self.viewControllers.count; //初始化選中的control的背景視圖 _selectImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0,controlWidth, 49)]; _selectImage.image = [UIImage imageNamed:selectImageName]; [_newTabBar addSubview:_selectImage]; //首先通過for迴圈瞭解產生controller的數量 for (int i = 0; i < self.viewControllers.count; i ++) { //自定義控制項 UIControl *newControl = [[UIControl alloc] initWithFrame:CGRectMake(i * controlWidth, 0, controlWidth, 45)]; //將自定義的tabBarButton 添加到 自定義的tabBar上 [_newTabBar addSubview:newControl]; //添加點擊效果 [newControl addTarget:self action:@selector(controlAction:) forControlEvents:UIControlEventTouchUpInside]; //通過設置tag方便傳值 newControl.tag = 1000 + i; //得到當前的控制器 UIViewController *viewC = [self.viewControllers objectAtIndex:i]; //拿到之前的圖片和信息 UIImageView *imageView = [[UIImageView alloc] init]; imageView.image = viewC.tabBarItem.image; UILabel *label = [[UILabel alloc] init]; label.text = viewC.tabBarItem.title; } } // - (void)controlAction:(UIControl *)control { self.selectedIndex = control.tag - 1000; //通過獲得的tag值進行切換ViewController //移動動畫效果的實現 [UIView animateWithDuration:.4 animations:^{ _selectImage.center = control.center; }]; } /* 細節很重要 (1)用tabBar的selectedIndex屬性,可以讓自己創建的按鈕關聯到ViewController (2)取消系統的高亮:可以定義一個按鈕,覆寫裡面的setHighlied方法,什麼也不做就行了 (3)關於幾個按鈕只選中一個的方法:設置一個屬性,記錄上一個選中的按鈕,點擊當前按鈕,把上一個按鈕設置為未選中,並把當前的按鈕設置為選中,最後把當前按鈕賦值給上一個按鈕 */