天天看點

UITabBarController詳解

UITabBarController使用詳解

  UITabBarController是IOS中很常用的一個viewController,例如系統的鬧鐘程式,ipod程式等。UITabBarController通常作為整個程式的rootViewController,而且不能添加到别的container viewController中。

  首先我們看一下它的view層級圖:

UITabBarController詳解

一、手動建立UITabBarController

  1、建立一個UITabBarController對象

  2、建立tabbarcontroller中每一個tab對應的要顯示的對象

  3、通過UITabBarController的viewController屬性将要顯示的所有content viewcontroller添加到UITabBarController中

  4、通過設定UITabBarController對象為window.rootViewController,然後顯示window

  下面看一個簡單的例子:

二、UITabBarItem

  UITabBar上面顯示的每一個Tab都對應着一個ViewController,我們可以通過設定viewcontroller.tabBarItem屬性來改變tabbar上對應的tab顯示内容。否則系統将會根據viewController的title自動建立一個,該tabBarItem隻顯示文字,沒有圖像。當我們自己建立UITabBarItem的時候,我們可以顯示的指定顯示的圖像和對應的文字描述。當然還可以通過setFinishedSelectedImage:withFinishedUnselectedImage:方法給選中狀态和飛選中狀态指定不同的圖檔。下面看個自己建立UITabBarItem的小例子:

  此外UITabBarItem還有一個屬性badgeValue,通過設定該屬性可以在其右上角顯示一個小的角标,通常用于提示使用者有新的消息,使用很簡單,後面有例子。

三、moreNavigationController

  UITabBar上最多可以顯示5個Tab,當我們往UITabBarController中添加超過的viewController超過5個時候,最後一個一個就會自動變成

UITabBarController詳解

,按照設定的viewControlles的順序,顯示前四個viewController的tabBarItem,後面的tabBarItem将不再顯示。當點選more時候将會彈出一個标準的navigationViewController,裡面放有其它未顯示的的viewController,并且帶有一個edit按鈕,通過點選該按鈕可以進入類似與ipod程式中設定tabBar的編輯界面。編輯界面中預設所有的viewController都是可以編輯的,我們可以通過設定UITabBarController的customizableViewControllers屬性來指定viewControllers的一個子集,即隻允許一部分viewController是可以放到tabBar中顯示的。但是這塊兒要注意一個問題就是每當UITabBarController的viewControllers屬性發生變化的時候,customizableViewControllers就會自動設定成跟viewControllers一緻,即預設的所有的viewController都是可以編輯的,如果我們要始終限制隻是某一部分可編輯的話,記得在每次viewControlles發生改變的時候,重新設定一次customizableViewControllers。

  

四、UITabBarController的Rotation

  UITabBarController預設隻支援豎屏,當裝置方向放生變化時候,它會查詢viewControllers中包含的所有ViewController,僅當所有的viewController都支援該方向時,UITabBarController才會發生旋轉,否則預設的豎向。

  此處需要注意當UITabBarController支援旋轉,而且發生旋轉的時候,隻有目前顯示的viewController會接收到旋轉的消息。

五、UITabBar

   UITabBar自己有一些方法是可以改變自身狀态,但是對于UITabBarController自帶的tabBar,我們不能直接去修改其狀态。任何直接修改tabBar的操作将會抛出異常,下面看一個抛出異常的小例子:

  上面代碼的最後一行直接修改了tabBar的狀态,運作程式回得到如下結果:

UITabBarController詳解

六、Change Selected Viewcontroller

  改變UITabBarController中目前顯示的viewController,可以通過一下兩種方法:

  1、selectedIndex屬性

  通過該屬性可以獲得目前選中的viewController,設定該屬性,可以顯示viewControllers中對應的index的viewController。如果目前選中的是MoreViewController的話,該屬性擷取出來的值是NSNotFound,而且通過該屬性也不能設定選中MoreViewController。設定index超出viewControllers的範圍,将會被忽略。

  2、selectedViewController屬性

  通過該屬性可以擷取到目前顯示的viewController,通過設定該屬性可以設定目前選中的viewController,同時更新selectedIndex。可以通過給該屬性指派

tabBarController.moreNavigationController可以選中moreViewController。

  3、viewControllers屬性

  設定viewControllers屬性也會影響目前選中的viewController,設定該屬性時UITabBarController首先會清空所有舊的viewController,然後部署新的viewController,接着嘗試重新選中上一次顯示的viewController,如果該viewController已經不存在的話,會接着嘗試選中index和selectedIndex相同的viewController,如果該index無效的話,則預設選中第一個viewController。

七、UITabBarControllerDelegate

  通過代理我們可以監測UITabBarController的目前選中viewController的變化,以及moreViewController中對編輯所有viewController的編輯。通過實作下面方法:

  該方法用于控制TabBarItem能不能選中,傳回NO,将禁止使用者點選某一個TabBarItem被選中。但是程式内部還是可以通過直接setSelectedIndex選中該TabBarItem。

  下面這三個方法主要用于監測對moreViewController中對view controller的edit操作

七、附件UITabBarController測試程式源碼

UITabBarController詳解
UITabBarController詳解

SvTabBarAppDelegate.m

UITabBarController詳解
UITabBarController詳解

SvTabBarFirstViewController.h

UITabBarController詳解
UITabBarController詳解

SvTabBarFirstViewController.m

UITabBarController詳解
UITabBarController詳解

SvTabBarSecondViewController.h

UITabBarController詳解
UITabBarController詳解

SvTabBarSecondViewController.m

部門招人: 進階iOS、Android、前端開發,有意私聊,部落客請你喝️

如果覺得本文幫到了你,記得點贊哦,當然也可以請部落客喝一杯豆漿

微信二維碼

QQ二維碼

繼續閱讀