iOS UITabBarController-標(biāo)簽欄控制器、UITabBar-標(biāo)簽欄、UITabBarItem-標(biāo)簽項(xiàng)

一、什么是標(biāo)簽欄控制器?把標(biāo)簽欄控制器(UITabBarController)、標(biāo)簽欄(UITabBar)、導(dǎo)航欄控制器(UINavigationController)、導(dǎo)航欄(UINavigationBar)分清楚。
  UITabBarController是繼承與UIViewController的,它也是試圖控制器,叫標(biāo)簽欄試圖控制器,UIViewController是繼承與UIResponder的,UIresponder是繼承于NSObject的。
  UITabBarController(標(biāo)簽欄控制器)和UINavigationController(導(dǎo)航欄控制器)一樣是用來(lái)管理視圖控制器的,但UINavigationController是用來(lái)管理視圖控制器之間的導(dǎo)航(此處似乎有些許籠統(tǒng),具體什么是導(dǎo)航,需要多使用幾次標(biāo)簽欄控制器和導(dǎo)航欄控制器,自然明白了),UITabBarController是用來(lái)管理固定的幾個(gè)視圖控制器,這幾個(gè)被管理的視圖控制器是并列的,可以任意切換顯示。
  很多常見的應(yīng)用程序都用UITabBarController來(lái)做整體的布局,如下圖所示:

  

  在此圖中程序框架就是從tabBarController上開始,tabBarController有個(gè)屬性是viewControllers,是NSArry類型的,這一點(diǎn)和navigationController是一樣的,因此一個(gè)標(biāo)簽欄控制器(UITabBarController)可以對(duì)應(yīng)多個(gè)視圖控制器(UIViewController)。
  由于導(dǎo)航欄控制器是繼承于視圖控制器,所以一個(gè)標(biāo)簽欄控制器也就可以對(duì)應(yīng)多個(gè)導(dǎo)航欄控制器。
  再往下一個(gè)導(dǎo)航欄控制器又可以對(duì)用多個(gè)視圖控制器,但必須對(duì)應(yīng)一個(gè)根視圖控制器。補(bǔ)充說(shuō)明:在storyBoard里面,一個(gè)導(dǎo)航控制器連線一個(gè)根試圖控制器,其他的子視圖控制器是通過(guò)push進(jìn)去的,不連線。

說(shuō)了這么多,到底什么是標(biāo)簽欄控制器呢?標(biāo)簽欄控制器(UITabBarController)就是帶有標(biāo)簽欄(UITabBar)的控制器,標(biāo)簽欄(UITabBar)是標(biāo)簽欄控制器的屬性,它是標(biāo)簽欄控制器上的一個(gè)組成部分,就像導(dǎo)航欄控制器(UINavigationController)一樣,導(dǎo)航欄控制器帶有一個(gè)導(dǎo)航欄(UINavigationBar)。在存在導(dǎo)航欄控制器的情況下顯示在模擬器最上面的一欄就是導(dǎo)航欄,那標(biāo)簽欄控制器(UITabBarController)的標(biāo)簽欄(UITabBarItem)在哪里呢,存在標(biāo)簽欄控制器的時(shí)候顯示在模擬器上就是最下面的一欄。

  標(biāo)簽欄如圖:
導(dǎo)航欄如圖:

  標(biāo)簽欄和導(dǎo)航欄分別是標(biāo)簽欄控制器和導(dǎo)航欄控制器的一部分。
  那在上標(biāo)簽欄的圖里面,下面的五個(gè)button是什么呢?它們就是標(biāo)簽欄(UITabBar)的標(biāo)簽項(xiàng)items(UITabBarItem)。就如導(dǎo)航欄控制器(UINavigationController)上有一個(gè)導(dǎo)航欄(UINavigationBar),導(dǎo)航欄上又有一個(gè)導(dǎo)航項(xiàng)(UINavigationItem)一樣。
  
  注意:TabBar只能最多顯示五個(gè)tabBarItem。如果超過(guò)5個(gè)則會(huì)自動(dòng)生成個(gè)More的標(biāo)簽顯示剩余的TabBarItem, 這些TabBarItem可以通過(guò)編輯顯示在UITabBar上。

  

二、TabBarController的結(jié)構(gòu)
  Tab控制器是用數(shù)組管理子視圖控制器,并且子視圖之間是 平等關(guān)系。導(dǎo)航控制器所管理的視圖控制器之間的上下級(jí)關(guān)系。

  

  
  就像UINavigationBar一樣,UITabBar是繼承于UIView的,它的結(jié)構(gòu)如下圖:

  

  
  補(bǔ)充說(shuō)明:UITabBarItem又是什么呢?它是誰(shuí)的屬性?
    UITabBarItem是試圖控制器viewController的屬性,而不是標(biāo)簽欄控制器(UITabBarController)或標(biāo)簽欄(UITabBarItem)的屬性,它是繼承于UIBarItem的,UIBarItem又繼承與NSObject。
    UINavigationItem是直接繼承于NSObject的,而UITabBarItem是繼承于UIBarItem,UIBarItem繼承于NSObject。UINavigationItem和UITabBarItem都是試圖控制器viewController的屬性,而不是導(dǎo)航欄控制器和標(biāo)簽欄控制器的屬性。
  
三、UITabBarController代理

  常用代理方法:
  //視圖將要切換時(shí)調(diào)用,viewController是將要顯示的控制器。
  - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController { }
  //視圖已經(jīng)切換后調(diào)用,viewController是已經(jīng)顯示的控制器。
  - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容