1、概述
跟uinavigationcontroller類似,uitabbarcontroller也可以輕松地管理多個控制器,輕松完成控制器之間的切換,典型例子就是qq、微信等應用。
2、uitabbarcontroller的簡單使用
uitabbarcontroller的使用步驟:
(1)初始化uitabbarcontroller
(2)設定uiwindow的rootviewcontroller為uitabbarcontroller
(3)根據具體情況,通過addchildviewcontroller方法添加對應個數的子控制器
3、uitabbarcontroller的子控制器
uitabbarcontroller添加控制器的方式有2種:
(1)添加單個子控制器
- (void)addchildviewcontroller:(uiviewcontroller *)childcontroller;
(2)設定子控制器數組
@property(nonatomic,copy) nsarray *viewcontrollers;
(3)根據索引選擇子控制器
self.selectedindex = 0;//選中第0個子控制器
4、uitabbar
如果uitabbarcontroller有n個子控制器,那麼uitabbar内部就會有n個uitabbarbutton作為子控件。
例如:如果uitabbarcontroller有4個子控制器,那麼uitabbar的結構大緻如下圖所示:
5、uitabbarbutton
uitabbarbutton裡面顯示什麼内容,由對應子控制器的tabbaritem屬性決定:
例如:
uiviewcontroller *vc1 = [[uiviewcontroller alloc] init];
vc1.tabbaritem.title = @"聯系人";
vc1.tabbaritem.image = [uiimage imagenamed:@"tab_buddy_nor"];
點選相關tabbaritem後,系統會自動把按鈕變為上圖所示藍色,并不需要提供藍色的按鈕圖檔了。也可以通過調用selectedimage方法設定點選後顯示的圖檔。
childvc.tabbaritem.selectedimage =
[[uiimage imagenamed:selectedimagename]
imagewithrenderingmode:uiimagerenderingmodealwaysoriginal];
ios7必須設定渲染模式為不渲染,否則選擇後還會變成藍色。ios6不用設定。但ios6沒有此方法,是以用此方法前要根據系統版本進行分情況。例如:
#define ios7 ([[uidevice currentdevice].systemversion doublevalue] >= 7.0)
if (ios7) {
childvc.tabbaritem.selectedimage = [selectedimage imagewithrenderingmode:uiimagerenderingmodealwaysoriginal];
} else {
childvc.tabbaritem.selectedimage = selectedimage;
}
也可以在storyboard中直接拖一個uitabbarcontrollerview過去,然後右鍵選擇view controllers拖線到子控制器添加子控制器,如下圖:
6、app主流ui架構結構
7、 modal
除了push之外,還有另外一種控制器的切換方式,那就是modal。任何控制器都能通過modal的形式展示出來。modal的預設效果:新控制器從螢幕的最底部往上鑽,直到蓋住之前的控制器為止。
以modal的形式展示控制器:
-(void)presentviewcontroller:(uiviewcontroller *)viewcontrollertopresent animated: (bool)flag completion:(void (^)(void))completion
mjtwoviewcontroller *two = [[mjtwoviewcontroller alloc] init];
[self presentviewcontroller:two animated:yes completion:^{
nslog(@"展示mjtwoviewcontroller完畢.......");//展示完畢會調用
}];
關閉當初modal出來的控制器:
- (void)dismissviewcontrolleranimated: (bool)flag completion: (void (^)(void))completion;
[self dismissviewcontrolleranimated:yes completion:^{
nslog(@"關閉mjtwoviewcontroller....");//關閉後會執行