UITabBar的三種經常使用方法(兩種自定義)即自動切換tabbar各個子控制器

        在實際的項目開發中,凡是使用UITabBarController做爲導航控制器的,在使用的過程當中要注意三大問題點:1 UITabBarController添加子控制的方法  2 自定義的UITabBar的繼承問題  3 自定義的UITabBar, 下面就詳細就這兩方面進行討論和處理數組

1 UITabBarController添加子控制的方法:常見有兩種方法:spa

1.1)其中一種是使用UIViewController的添加子控制器的方法(因爲UITabBarController繼承至UIViewController,因此也有這個方法):addChildViewController:<#(nonnull UIViewController *)#>,使用此中方法來添加子控制時,若是UITabBarButton導航按鈕的圖片不存在多狀態顯示不一樣圖片的須要,使用vc.tabBarItem.image來設置就能夠了;可是若是導航按鈕圖片須要多狀態顯示不一樣狀態下的圖片時,必須是vc.tabBarItem.image和vc.tabBarItem.selectedImage結合使用纔有效(這再也不須要設置背景圖片了),若是隻是使用設置導航按鈕的背景圖片的不一樣狀態下的圖片,是無效的,由於使用這種方法添加子控制器系統只默認顯示UIControlStateNormal背景圖片,其餘狀態圖片不會顯示的。還有很重要一點:使用這種方法時,在自定義tabBar時,必定要使用KVC來把系統的tabBar賦值給自定義的tabBar,其餘方式都是錯誤報錯的。使用此種方法的好處是,第一個導航控制器是選中的,因此界面展現時默認第一個導航按鈕是選中狀態的,不用再處理了,使用下面的方法則須要再處理,推薦用此方法設計

1.2)另外一種UITabBarController添加子控制器的方法是使用其本身的屬性方法: NSArray<__kindof UIViewController *> *viewControllers;建立子控制數組來添加子控制器。這種方法能夠任意經過設置按鈕的不一樣狀態下的圖片來處理,十分簡單,對於那些UITabBarButton導航按鈕須要在不一樣狀態下顯示不一樣圖片的需求,均可以使用這種來處理,用起來駕輕就熟,十分快捷簡單,不像第一種方法那樣容易出錯,能夠隨意自定義tabBar,根據須要來推薦使用這種方式代理


2 自定義的UITabBar的繼承問題 orm

       關於自定義的tabBar,是繼承至UITabBar仍是UIView,取決於UITabBarButton(即導航欄的按鈕)上面的圖片和導航按鈕title文字是否一體(一體即美工作圖時,圖片上也帶有title文字了,圖片和文字在一張圖片上了,不須要使用代碼來加載文字了,以下圖1是一體的);繼承

2.1)當圖片和文字是一體時,兩種都方便快捷,均可以使用;圖片

2.2)當UITabBarButton只有圖片沒有相應的導航按鈕文字時(即導航按鈕文字還須要用代碼加載),最好使用繼承至UITabBar的自定義tabBar,這樣方便使用系統的vc.tabBarItem.image和vc.title來直接設置,且能保證圖片和文字大小比例尤爲保證圖片和文字良好的上下左右的位置關係,使用繼承至UIView的自定義tabBar,則極可能由於圖片的大小不合適而致使圖片和文字的位置關係/大小比例不和諧(以下圖2)。開發

圖1:                     get

 

圖2:it

 

3 自定義的UITabBar

因爲tabBar屬性是隻讀屬性,所以,在自定義時,不能直接對其進行賦值(即讓系統的tabBar賦值給自定義的tabBar),所以就出現了一下兩種處理方式:

3.1) 使用KVC來處理,自定義的tabBar必須繼承至UITabBar,因爲KVC是使用運行時來實現的,所以可使用KVC來給只讀屬性賦值,詳細demo地址:http://pan.baidu.com/s/1i4SX1QX

3.2)不使用KVC,使用代理處理,自定義的tabBar必須繼承至UIView,經過設置自定義tabBar的代理方法來實現各子控制器的切換,詳細demo地址:http://pan.baidu.com/s/1bQ3Doi

3.3)不須要自定義(由於有n個控制器,tabBar對應這n個控制器,不須要添加額外的導航按鈕),能夠直接使用vc.tabBarItem.image vc.tabBarItem.selectedImage設置,詳細demo地址:http://pan.baidu.com/s/1c2ly0EW

 

注意:UITabBarItem的image屬性和selectedImage屬性,即導航按鈕的圖片,這個圖片默認大小是30*30像素,當圖片尺寸太大時,不會自動適應導航按鈕的高度了,從而圖片加載不出來。所以,導航欄圖片必須讓美工作尺寸合適,不能太大,通常60 * 60 的就能夠做爲設計尺寸的上限了。

 

2 自動切換UITabBarController各個子控制器方法:使用UITabBarController的selectedIndex屬性,只需這樣設置 self.tabBarController.selectedIndex = 2;//自動切換tabbar控制器 其中2爲控制器所在的tabBarItem標籤

相關文章
相關標籤/搜索