返回按鈕定製方法之比較

若是你想在導航欄/工具欄定製一個帶左箭頭的Bar Button Item,那麼有三種可能的方法:ide

q用png圖片定製Bar Button Item ;工具

q用png圖片定製Button ,而後addSubviews至導航欄/工具欄。spa

q使用私有API按鈕類型101,而後addSubviews至導航欄/工具欄;.net

如今比較三種方法之異同:orm

1、第1種方法:用png圖片定製BarButton Item圖片

    UIBarButtonItem* buttonItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"backbutton_alpha.png"]get

                                                                  style:UIBarButtonItemStylePlainit

                                                                 target:selfio

                                                                 action:@selector(goBackAction)];select

   

   

    toolbar.items = [NSArray arrayWithObjects:buttonItem,nil];

   

這種方法須要爲BarButtonItem準備一張mask圖片backbutton_alpha.png。backbutton_alpha.png圖片將做爲BarButtonItemd的mask(遮罩)圖片,與tintcolor一塊兒產生一張背景圖片。你不能用通常的png圖片,不然按鈕會呈現一個實心的方塊。通常的png圖片,須要經過photoshop等進行處理。好比backbutton_alpha.png其實是由backbutton_blue.png圖片通過‘mask to alpha ’處理獲得的。結果處理後的backbutton_alpha.png,只保留了原圖的alpha通道信息。

這種方法的好處在於,BarButtonItem的顏色是根據工具欄/導航欄的tintcolor而變的。如上圖的第1個按鈕,無論工具欄/導航欄的tintcolor作何調整,BarButtonItem的顏色會隨之調整,你不須要準備新的圖片。缺點是,BarButtonItem不會保留原圖的效果(由於顏色信息丟失),它的顏色會比其餘兩種方法制做的要淺些。

2、第2種方法:用png圖片定製Button ,而後addSubviews至導航欄/工具欄

    //導航按鈕"返回"=======

    UIButton* btn = [UIButtonbuttonWithType:UIButtonTypeCustom];

btn.frame = CGRectMake(80, 8, 47, 28);

[btnsetImage:[UIImageimageNamed:@"backbutton_green.png"forState:UIControlStateNormal];

[btnaddTargetselfaction@selector(goBackAction) forControlEventsUIControlEventTouchUpInside];

[toolbaraddSubview: btn];

 

這種方法制做的按鈕見上圖的第二個按鈕。如代碼所示,放在工具欄/導航欄上的按鈕實際上已經不是BarButtonItem了,而是一個custom button。所以須要爲它準備一張png位圖。若是工具欄/導航欄的tintcolor發生改變,按鈕的顏色樣式仍然會是原來的樣子,而不會自行調整。因此當工具欄/導航欄的tintcolor發生變化,你須要及時更換custom button的背景圖片。優勢是,因爲使用的是位圖,這個按鈕能夠顯示得很是個性和真實。

   

3、 第3種方法:使用私有API按鈕類型101,而後addSubviews至導航欄/工具欄

    UIButton* button = [UIButton buttonWithType:101];// left-pointing shape!

    [button addTarget:self action:@selector(goBackAction)forControlEvents:UIControlEventTouchUpInside];

    [button setTitle:@"返回1111" forState:UIControlStateNormal];

    button.frame = CGRectMake(140, 7, 87, 28);

[toolbar addSubview: button];

 

第3種方法本質上仍然同第2種方法,是UIButton的定製而不是BarButtonItem的定製, 如上圖第3個按鈕所示。

蘋果的UIButtonType並不單單是API中申明的5個枚舉值。超過100的UIButtonType將顯示一些特殊的按鈕。好比101就是一個backButton樣式的導航按鈕,110則指定各類tintcolor的水晶按鈕。可是這些undocumented的UIButtonType屬於蘋果「私有API」,可能在新的iOS版本中得不到支持。

但這種方法的好處在於,你不須要讓美工爲你製做專門的按鈕圖片。並且它的標題是能夠設置的(圖片則不行,一旦製做好就不能更改),當文字內容較多時,你還能夠指定按鈕的frame大小,讓按鈕大小天然改變,以容納更多標題文本。

遺憾的是,這種方法沒法讓按鈕顏色根據工具欄/導航欄的tintcolor進行調整。UIButton仍然有tintcolor屬性,但一旦你修改UIButton的tintcolor屬性,按鈕就會失去原有的樣式,變成一個Round Rect  Button。因此你只能以默認的顏色(藍色)使用這種類型的按鈕(UIButtonType=101)。

4、 結論

儘可能採用第2種方法。

demo位於:http://download.csdn.net/detail/kmyhy/4902209。

相關文章
相關標籤/搜索