iOS小技巧 為按鈕設定不同狀態下的背景色

2022-08-20 17:45:11 字數 1406 閱讀 4179

我們知道直接在storyboard中設定按鈕的背景色是不能根據不同狀態來更改的,那問題來了,如果我們需要在不同的狀態下(比如按鈕沒有被按下或者被按下),使得按鈕呈現不同的背景色怎麼辦?

比如上圖左邊是按鈕沒有被按下時的背景色,右邊是按鈕被按下時的背景色。

我們知道按鈕的image屬性可以在不同的狀態下設定不同的,那最直觀的辦法就是提供兩種背景色的,然後直接在storyboard上通過設定不同狀態下image屬性的值來達到目的。

但是這種方案最不好的地方就在於需要提供很多僅僅是顏色不同的,如果以後背景色改成其他色系怎麼辦?設定以後提供換膚功能,每一種**都要提供一整套這些背景色嗎?

我們還知道按鈕的backgroundimage也是可以根據不同狀態來設定不同的背景的,那方案就來了,讓程式根據顏色自動生成不同的純色背景即可。

為了保證可復用性,定義乙個uibutton的category,實現如下:

@implementation uibutton (fillcolor)

- (void)setbackgroundcolor:(uicolor *)backgroundcolor forstate:(uicontrolstate)state

+ (uiimage *)imagewithcolor:(uicolor *)color

@end

上述**應該還是很直觀的,呼叫的辦法如下:

[self.button setbackgroundcolor:getcolorfromhex(0xffff9000) forstate:uicontrolstatenormal];

[self.button setbackgroundcolor:getcolorfromhex(0xffff6c00) forstate:uicontrolstatehighlighted];

其中getcolorfromhex是我自己定義的乙個巨集:

#define getcolorfromhex(hexcolor) \

[uicolor colorwithred:((hexcolor >> 16) & 0xff) / 255.0 \

green:((hexcolor >> 8) & 0xff) / 255.0 \

blue:((hexcolor >> 0) & 0xff) / 255.0 \

alpha:((hexcolor >> 24) & 0xff) / 255.0]

其實上述巨集**寫成category會更好,以後再做修改了。

當然根據一向的慣例,都會給出以上方法的出處(仍然是來自於碼農的聖地stackoverflow):這裡

QT按鈕TEXT設定小技巧

如上圖一樣,第二介面 是dialog,檔名是button 首先,在第乙個介面的原始檔中新增乙個標頭檔案 include ui button.h 然後在按鈕的槽中加入 button setdlg new button setdlg ui pushbutton settext tr hello it i...

為按鈕位置配置不同的IOS背景

面對全屏的背景,要在固定的位置放置多個按鈕的問題我的解決辦法,具體如下 就是這樣的。再重複一下問題 例如我要在上述全屏的背景上的 m u r p 和 訪問官方 五個地方放置五個按鈕,要求適配各種型號手機。我是這樣解決的 storyboard 首先 在storyboard裡面拖4個viewcontro...

iOS之小技巧,跳轉到系統設定介面

ios 10 以前的實現方法 蜂窩網路 prefs root mobile data settings id wi fi prefs root wifi 定位服務 prefs root location services 個人熱點 prefs root internet tethering 關於本機...