本節書摘來自異步社群《ios創意程式設計家》一書中的第6章,第6.3節标簽頁控制器uitabbarcontroller,作者 林柏全,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
6.3 标簽頁控制器uitabbarcontroller
ios創意程式設計家
相對于導航欄控制器,标簽頁控制器(uitabbarcontroller)是将幾個具有獨立功能的界面使用tab分隔開來,并定義在界面的下方。這些界面會存放在一個數組裡面,而裡面每個元素則是uiview-
controller的類,當然也可以包括導航欄uinavigationcontroller在内。可以通過viewcontrollers屬性或是setviewcontrollers: animated:方法來設定标簽頁控制器所控制的界面。
在使用标簽頁控制器的時候,難免會碰到要使用的标簽頁過多的情況,這時候,标簽頁控制器會自動産生一個more的标簽頁,所有超出界面範圍的标簽頁都會放到這個标簽頁所包含的界面控制器中。可以通過morenavigationcontroller屬性來取得這個界面控制器。
當标簽頁被選中之後,可以通過selectedviewcontroller屬性來取得選中的界面控制器,或是通過selectedindex來取得或設定選中的标簽頁索引值。
與大多數控件一樣,标簽頁控制器也是通過代理者來處理相關的事件的。可以通過delegate屬性來指定它的代理者(該代理者必須實作uitabbarcontrollerdelegate),以處理以下的事件。
由于使用者可能在執行期間改變标簽頁的順序,您可以通過代理者來檢測到這個變化。
在xcode中産生一個标簽頁的應用程式十分簡單,尤其是通過故事闆的方式。現在就讓我們建立一個tabbed application的應用程式吧。
請記得勾選“use storyboard”以及“use automatic reference counting”選項。産生後的應用程式會預設産生兩個标簽頁。如果不需要它們,那麼可以直接在設計界面中選中該界面後删除它。
由于每個标簽頁都表示一個界面,是以每個界面都會有一個相對應的界面控制器。是以,接下來,我們要為新的标簽頁産生一個新的界面控制器。
首先,先添加一個uiviewcontroller的類,并命名為“thirdviewcontroller”。在産生的過程中請不要勾選“with xib for user interface”這個選項。
從控件庫拉進一個view controller,并在辨別檢視視窗(identity inspector)中選擇thirdviewcontroller為這個界面控制器的類。
現在,界面上已經有3個界面控制器了,不過我們的标簽頁卻隻有兩個。是以,我們需要産生第3個标簽頁。
連接配接标簽頁與界面控制器以産生新的标簽頁。
産生新标簽頁的方式與前面連接配接的方式一樣,隻要在tab bar controller按住“control”鍵不放,然後拉到新的界面控制器上就可以了。這時候你會看到storyboard segues的視窗中多了一個“relationship – viewcontrollers”的選項,選擇這個選項後即可增加一個新的标簽頁,如圖6.12所示。

現在,可以在新的界面控制器上直接點選标簽頁的标題,并修改上面的文字。标簽頁應用程式的産生大緻上就是這樣,非常簡單吧!
注意:
注意:如果想要在标簽頁上使用自己設計的圖示,您可以在ios human interface guidelines中找到相關的規定。标簽頁的圖示約為3030(或6060),且必須是黑白的。這是因為系統會在該标簽頁選中時動态地将黑色部分塗成高亮度的顔色,如果将圖示設計成彩色的,整個圖示會擠成一團。
雖然按照官方的做法,标簽頁的圖示隻能使用黑白色,不過,通過一些技巧,我們仍然可以做到彩色圖示的效果。這個技巧的原理是通過貼圖的方式貼到标簽頁控制器的上面,是以原來的标簽頁上的圖示與文字都要消除掉,并且讓每張圖的大小恰好可以完整地遮住标簽頁控制器。接着,我們便可以将appdelegate.m的程式代碼修改如下:
然後準備好如圖6.13所示的彩色圖示,每張圖都得包含所有的圖示,至于上面圖示的高亮度顔色或圖形則可以自由設計。通過這樣的方式,标簽頁控制器便由黑白變成彩色的了。