天天看點

iOS開發之UITabBarController

1、概述

跟uinavigationcontroller類似,uitabbarcontroller也可以輕松地管理多個控制器,輕松完成控制器之間的切換,典型例子就是qq、微信等應用。

iOS開發之UITabBarController

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的結構大緻如下圖所示:

iOS開發之UITabBarController

5、uitabbarbutton

uitabbarbutton裡面顯示什麼内容,由對應子控制器的tabbaritem屬性決定:

iOS開發之UITabBarController

例如:

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拖線到子控制器添加子控制器,如下圖:

iOS開發之UITabBarController

6、app主流ui架構結構

iOS開發之UITabBarController

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....");//關閉後會執行

iOS開發之UITabBarController