【iOS開發-28】製造一個UITabBarController標籤控制器、定製UITabBarItem文字圖片的6種方式以及More講解,

來源:互聯網
上載者:User

【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中去把模擬器語言設定成簡體中文即可)




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.