UIButton作為最常用的控件之一画畅,今天卻在設置背景圖片時倒騰了好久氯材,現(xiàn)將此坑記錄如下兆沙。
創(chuàng)建
xib:直接拖
code:UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom];
注意:xib中直接拖進去的button默認為UIButtonTypeSystem,該類型默認會對button做些一些定制化工作(包括字體男韧,顏色等)朴摊,如果我們在該類型的基礎上對button做自定義背景圖片,會產(chǎn)生錯誤的效果此虑。對于我們最常用的按鈕甚纲,通常設定為UIButtonTypeCustom
背景圖片
設置常態(tài)下的背景圖片 [self.button setBackgroundImage:[UIImage imageNamed:@"green_btn_normal"] forState:UIControlStateNormal]; 設置按下狀態(tài)的背景圖片 [self.button setBackgroundImage:[UIImage imageNamed:@"green_btn_selected"] forState:UIControlStateHighlighted];
注意:按下狀態(tài)時,state的值是UIControlStateHighlighted朦前,而不是selected介杆,只有這樣設置,才能讓你的按鈕顯示出正確的顏色
實例解析
制作demo韭寸,需求如下:
- 創(chuàng)建2個按鈕
- SystemTypeOriginal為storyboard中直接拖上去的button春哨,type保持system不變,設置green_btn_normal.png為normal狀態(tài)的背景圖片恩伺,設置green_btn_selected.png為highlighted狀態(tài)的背景圖片
- CustomTypeOriginal為storyboard中直接拖上去的button赴背,type設置為Custom,設置green_btn_normal.png為normal狀態(tài)的背景圖片晶渠,設置green_btn_selected.png為highlighted狀態(tài)的背景圖片
運行demo凰荚,效果圖如下:
通過上圖分析可知:
- SystemType下字體默認為15,且字體顏色為藍色
- CustomType下字體默認為18褒脯,字體顏色為白色
- 普通狀態(tài)下的按鈕背景圖片與預期相符便瑟,green_btn_normal表示的是原始圖片的顏色,此時原始圖片顏色與按鈕背景顏色一致
此時憨颠,按下SystemTypeOriginal胳徽,效果圖如下:
上圖的按下效果變得非常詭異积锅,與預期的green_btn_selected顏色相差甚遠,這就是上面說的养盗,在systemtype下缚陷,設置背景圖片會產(chǎn)生錯誤的效果,所以常用的按鈕都會設置為Customtype往核。
那么箫爷,我們按下CustomTypeOriginal,看下效果圖:
現(xiàn)在按下的背景圖片就對了聂儒!
為什么要設置highlighted而不是selected
因為button在按下時虎锚,狀態(tài)是highlighted,而不是selected衩婚,所以設置selected是沒有作用的窜护。