【iOS開發-28】製造一個UITabBarController標籤控制器、定製UITabBarItem文字圖片的6種方式以及More講解,
一、一個簡單的創造過程(實際項目不推薦這種方式,僅做示範理解原理用)
在AppDelegate.m中:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //建立一個到導航控制器 UIViewController *vc1=[[UIViewController alloc]init]; UINavigationController *nav1=[[UINavigationController alloc]initWithRootViewController:vc1]; nav1.title=@"首頁"; //建立三個視圖控制器 UIViewController *vc2=[[UIViewController alloc]init]; vc2.title=@"收藏"; UIViewController *vc3=[[UIViewController alloc]init]; vc3.title=@"搜尋"; UIViewController *vc4=[[UIViewController alloc]init]; vc4.title=@"設定"; //建立一個數組把上面1個導航控制器和3個視圖控制器的執行個體都裝進去 NSArray *arr1=[[NSArray alloc]initWithObjects:nav1,vc2,vc3,vc4, nil]; //先執行個體化一個UITabBarController,然後把上面那個數組賦值給它的viewControllers屬性 UITabBarController *tb1=[[UITabBarController alloc]init]; tb1.viewControllers=arr1; //最重要的是把上面執行個體化的標籤控制器賦值給self.window的rootViewController,這樣才能顯示,和之前說的導航控制器顯示是一樣的 self.window.rootViewController=tb1; // Override point for customization after application launch. return YES;}
運行效果:
二、注意事項
(1)以上直接把數組賦值給標籤控制器執行個體的viewControllers屬性。而一般在做項目時不這樣做,以上只是示範整個原理實現的過程。
(2)UITabBarController有兩個子視圖,一個是UITabBar部分,它裡面放得時UITabBarItem就是下面四個切換的標籤那一塊。另一個是內容部分,就是幾個視圖。我們點擊不同的標籤,就會切換顯示不同的視圖。所以我們載入視圖控制器的話,可能在針對視圖那一塊進行修改。而定製標籤的話,是針對UITabBarItem進行修改。
(3)尺寸,UITabBarItem有圖片icon也有文字,圖片是50*50。具體的參數,點擊這裡。
三、UITabBarItem屬性介紹及6種建立方式
我們建立了6個視圖控制器,然後把它們的標頭檔匯入進來,所以在AppDelegate.m檔案中:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //第一種方式:通過導航控制器的tabBarItem來調用image屬性 ViewController *vc0=[[ViewController alloc]init]; UINavigationController *nav0=[[UINavigationController alloc]initWithRootViewController:vc0]; //用nav0.tabBarItem.title=@"介面1";來賦值標題時用.title取值取不到, //用以下方式賦值標題,可以用.tabBarItem.title取值,但是以下方式直接把navigationItem.title也一併賦值了 //優先使用以下的方法 nav0.title=@"介面1"; //賦值圖片 nav0.tabBarItem.image=[UIImage imageNamed:@"Slice@1x.png"]; //第二種方式:通過視圖控制器的tabBarItem使用setFinishedSelectedImage方法,設定選中未選中圖片狀態 //不過這種方法貌似不被推薦不能使用了,在iOS7中已被拋棄 //所以推薦使用initWithTitle:image:selectedImage:這個初始化方法 ViewController1 *vc1=[[ViewController1 alloc]init]; //vc1.title=@"介面2"; //[vc1.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"1@1x.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"1-selected@1x.png"]]; UITabBarItem *tb0=[[UITabBarItem alloc]initWithTitle:@"介面2" image:[UIImage imageNamed:@"Slice@1x.png"] selectedImage:[UIImage imageNamed:@"Slice-selected@1x.png"]]; vc1.tabBarItem=tb0; //第三種方式:通過視圖控制器的tabBarItem來調用image屬性 ViewController2 *vc2=[[ViewController2 alloc]init]; vc2.title=@"介面3"; vc2.tabBarItem.image=[UIImage imageNamed:@"Slice@1x.png"]; //第四種方式:設定徽標,badgeValue是tabBarItem的一個屬性,值是字串 ViewController3 *vc3=[[ViewController3 alloc]init]; vc3.title=@"介面4"; vc3.tabBarItem.image=[UIImage imageNamed:@"Slice@1x.png"]; vc3.tabBarItem.badgeValue=@"6"; //第五種方式:通過先設定一個系統內建的UITabBarItem,再把它賦值給視圖控制器的tabBarItem //用這種方式建立後,再設定.title或者.tabBarItem.Image就不起作用了 ViewController4 *vc4=[[ViewController4 alloc]init]; UITabBarItem *tb1=[[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:0]; vc4.tabBarItem=tb1; //第六種方式:通過先初始化一個帶有標題和圖片的UITabBarItem,然後把它賦值給視圖控制器的tabBarItem //相當於分別對.title和.tabBarItem.image進行設定,效果是類似的 //這種方式不推薦使用 ViewController5 *vc5=[[ViewController5 alloc]init]; UITabBarItem *tb2=[[UITabBarItem alloc]initWithTitle:@"介面6" image:[UIImage imageNamed:@"Slice@1x.png"] tag:1]; vc5.tabBarItem=tb2; //以下是整一個數組裝上面的那些個,然後初始化一個UITabBarController再把數組賦值給UITabBarController的viewControllers屬性 //最後別忘了,把window的根視圖控制器修改一下 NSArray *arr2=[[NSArray alloc]initWithObjects:nav0,vc4,vc1,vc3,vc2,vc5, nil]; UITabBarController *tbCon1=[[UITabBarController alloc]init]; tbCon1.viewControllers=arr2; self.window.rootViewController=tbCon1; // Override point for customization after application launch. return YES;}
(1)tabbar的表徵圖只能顯示5個,多於5個則統統歸置到more裡面,這個more事系統內建的表徵圖。
(2)主要由兩種方式:一種是直接在利用已有的導航控制器或者視圖控制器的.title和.tabBarItem.image屬性來設定文字和圖片。還有一種是先建立一個UITabBarItem(文字未選中圖片選中圖片等)然後把這個UITabBarItem賦值給導航控制器或者視圖控制器的.tabBarItem屬性。
(3)推薦使用第二種方法,因為它在建立UITabBarItem時可以一次性的把文字、選中圖片、未選中圖片等不同狀態都定義出來。
四、關於tabbar上得More
(1)當標籤多餘5個時,標籤控制器會自動建立一個moreNavigationController,即我們點擊More,它是一個導航控制器。
(2)點擊More之後我們可以點擊編輯,然後通過拖動對應的表徵圖來重新排列它們的顯示順序。
五、關於英文和中文語言的問題
我們上面的More和Edit都是英文,如何顯示成中文呢?需要用到本地化。該程式預設只提供英文一種語言,所以不管使用者手機設定成什麼語言,只要涉及到系統內建的文字都會是英文。我們需要給程式設定成兩種語言(中文和英文),這樣程式會根據使用者手機的語言設定顯示相應的語言。
方法:在Info.plist中增加一個Localizations,並給這個Localizations增加一個選項是簡體中文(預設只有英文)。
如此,打完收工!(如果你的文字仍然是英文,那麼點擊CMD+SHIFT+H回到主介面,然後到Setting中去把模擬器語言設定成簡體中文即可)