ios5及其以後提供了一個比較強大的工具uiappearance,我們通過uiappearance設定一些ui的全局效果,這樣就可以很友善的實作ui的自定義效果又能最簡單的實作統一界面風格,它提供如下兩個方法。
+ (id)appearance
這個方法是統一全部改,比如你設定uinavbar的tintcolor,你可以這樣寫:[[uinavigationbar appearance] settintcolor:mycolor];
+ (id)appearancewhencontainedin:(class <>)containerclass,...
這個方法可設定某個類的改變:例如:設定uibarbuttonitem 在uinavigationbar、uipopovercontroller、uitabbar中的效果。就可以這樣寫
[[uibarbuttonitem appearancewhencontainedin:[uinavigationbar class], [uipopovercontroller class],[uitabbar class] nil] settintcolor:mypopovernavbarcolor];
請注意*使用appearance設定ui效果最好采用全局的設定,在所有界面初始化前開始設定,否則可能失效。
uiappearance的上述方法在協定裡面,uiview遵守并實作了協定,是以他得子類了本身才能調用這幾個方法
具體ui外觀修改如下:
1.修改導航欄背景
代碼如下:
uinavigationbar * appearance = [uinavigationbar appearance];
uiimage *navbackgroundimg =[uiimage imagenamed:@"navbg.png”];
[appearance setbackgroundimage:navbackgroundimgforbarmetrics:uibarmetricsdefault];
2.标簽欄(uitabbar)
uitabbar *appearance = [uitabbar appearance];
//設定背景圖檔
[appearance setbackgroundimage:[uiimage imagenamed:@"tabbar_bg.png"]];
//門置選擇item的背景圖檔
uiimage *
selectionindicatorimage =[[uiimageimagenamed:@"tabbar_slider"]resizableimagewithcapinsets:uiedgeinsetsmake(4, 0, 0,0)]
;
[appearance setselectionindicatorimage:selectionindicatorimage];
3.分段控件(uisegmentcontrol)
uisegmentedcontrol *appearance = [uisegmentedcontrol appearance];
//segmenteg正常背景
[appearance setbackgroundimage:[uiimage imagenamed:@"segmente.png"]
forstate:uicontrolstatenormal
barmetrics:uibarmetricsdefault];
//segmente選中背景
[appearance setbackgroundimage:[uiimage imagenamed:@"segmente_a.png"]
forstate:uicontrolstateselected
//segmente左右都未選中時的分割線
//barmetrics表示navigation bar的狀态,uibarmetricsdefault 表示portrait狀态(44pixel
height),uibarmetricslandscapephone 表示landscape狀态(32pixel
height)
[appearance setdividerimage:[uiimage imagenamed:@"segmente_line.png"]
forleftsegmentstate:uicontrolstatenormal
rightsegmentstate:uicontrolstatenormal
barmetrics:uibarmetricsdefault];
forleftsegmentstate:uicontrolstateselected
rightsegmentstate:uicontrolstateselected
//字型
nsdictionary *textattributes1 = @{uitextattributefont:
[uifont systemfontofsize:18],
uitextattributetextcolor:
[uicolor bluecolor],
uitextattributetextshadowcolor:
[uicolor whitecolor],
uitextattributetextshadowoffset:
[nsvaluevaluewithcgsize:cgsizemake(1, 1)]};
[appearance settitletextattributes:textattributes1 forstate:1];
nsdictionary *textattributes2 = @{uitextattributefont:
[uicolor blackcolor],
[appearance settitletextattributes:textattributes2 forstate:0];
4.uibarbutton
注意:uibarbutton有leftbarbutton,rightbarbutton和backbarbutton,其中backbarbutton由于帶有箭頭,需要單獨設定。
barbutton背景設定是ios6.0及以後的,而backbutton是ios5.0及以後的,這裡要注意!
//修改導覽列上的uibarbuttonitem
uibarbuttonitem *appearance = [uibarbuttonitem appearancewhencontainedin:[uinavigationbar class], nil];
//設定導航欄的字型包括backbarbutton和leftbarbutton,rightbarbutton的字型
nsdictionary *textattributes = @{uitextattributefont:
[uicolorbluecolor],
[uicolorwhitecolor],
[appearance settitletextattributes:textattributes forstate:1];//forstate為0時為下正常狀态,為1時為點選狀态。
//修改leftbarbutton,rightbarbutton背景效果
[appearance setbackgroundimage:[uiimage imagenamed:@"navbarbutton.png"]
style:uibarbuttonitemstylebordered
[appearance setbackgroundimage:[uiimage imagenamed:@"navbarbutton_a.png"]
forstate:uicontrolstatehighlighted
//backbarbutton需要單獨設定背景效果。隻能在ios6.0以後才能用
[appearance setbackbuttonbackgroundimage:[uiimage imagenamed:@"nav_bg.png"]
forstate:0
barmetrics:uibarmetricsdefault];
[appearance setbackbuttonbackgroundimage:[uiimage imagenamed:@"work.png"]
forstate:1
[appearance setbackbuttontitlepositionadjustment:uioffsetmake(2,
-1)
forbarmetrics:uibarmetricsdefault];
5.工具欄(uitoolbar)
uitoolbar *appearance = [uitoolbar appearance];
//樣式和背景二選一即可,看需求了
//樣式(黑色半透明,不透明等)設定
[appearance setbarstyle:uibarstyleblacktranslucent];
//背景設定
[appearance setbackgroundimage:[uiimage imagenamed:@"toolbarbg.png"]
fortoolbarposition:uitoolbarpositionany