2009-06-19 48 views
20

我在Mac應用程序中有一個NSButton,它的顏色我想以編程方式更改,但沒有任何我嘗試過似乎工作。我試圖在NSButtonCell上創建一個輸出,並在那裏設置背景顏色,但這也不起作用。任何代碼片段都會有所幫助。更改NSButton的背景顏色

回答

8

標準Aqua(丸形)按鈕由系統繪製。他們沒有背景色。事實上,它們是由可可縫合在一起以形成一致的按鈕圖像的圖像組成的。所以Cocoa無法將圖像重新着色成您喜歡的顏色。只有默認按鈕(將Return設置爲等效鍵的那個按鈕)將具有藍色脈衝背景。

它聽起來像你想要做的將涉及到子類NSButtonCell和做你自己的繪圖。如果您想重新着色按鈕圖像以獲得所需的效果,可以使用出色的Theme Park實用程序提取Apple的按鈕圖像副本並使用它們。我承認自己做了這些,以便「竊取」某些不可訪問的界面元素,例如iTunes中的滾動器。

+0

這就解釋了爲什麼我不能修改背景主題公園是真正的寶石 – aleemb 2009-06-20 16:32:37

+0

任何想法如何做到這一點在山獅?主題公園需要豹。 – 2012-12-10 18:46:49

34

假設一切都連接在您的IB無邊界按鈕。從setBackgroundColor文檔

// *.h file 
IBOutlet NSButton* myButton; 

// *.m file 
[[myButton cell] setBackgroundColor:[NSColor redColor]]; 

注:

「的背景顏色僅繪製無邊界的按鈕時使用。」

如果這不會爲你做,那麼你需要重寫NSButton並自己實現繪圖。

祝你好運。

+0

這:造型,從界面生成器的在我的大部分窗戶上效果很好。任何想法爲什麼它不能在NSWindow上使用NSToolbar來交換它的NSViews?那些可交換的NSViews上的按鈕似乎完全不受背景色的影響,但我可以改變它們的文本顏色就好了( – valheru 2013-07-29 20:15:18

+0

這似乎不適用於swift,我did'n 't see the setbackgroundcolor method – 2018-01-23 12:53:49

+0

NSButtonCell上的屬性在Swift中仍然存在,應該像`(button.cell as?NSButtonCell)?. backgroundColor = NSColor.red` – Mark 2018-01-23 15:51:23

-10

的UIElement(元素是什麼Like按鈕,查看....)

的UIElement * VARNAME;

[varname setBackgroundColor:[UIColor colorWithRed:0.8 green:0.8 blue:0.6 alpha:1.0]]; 

例如: UIButton * pButton;

[pButton setBackgroundColor:[UIColor colorWithRed:0.8 green:0.8 blue:0.6 alpha:1.0]]; 
+2

這將無助於NSButton。 – 2010-07-27 11:31:41

3

馬克的回答是正確的。但是,如果通過代碼實現它會讓你感到混亂,那麼另一種方法是直接在界面構建器中進行設置。

  1. 找到interfaceBuilder中的按鈕並點擊它。
  2. 在界面構建器的對象瀏覽器部分,您會看到您單擊的按鈕上有一個下拉菜單圖標。點擊它。它會顯示NSButton的NSButtonCell。點擊它。
  3. 選中NSButtonCell後,單擊Identity-Inspector。
  4. 在身份檢查員尋找名爲User Defined Runtime Attributes
  5. 部分點擊小加號(+)來添加一個值。價值將顯示有3個屬性。 (A)的keyPath (B)類型(C)
  6. 更改的keyPath到:backgroundColor。將類型更改爲:Color。將值更改爲:您想要什麼顏色(將顯示顏色選擇器)

完成。

4

這裏是另一種可能的方式做到這一點:

let button = NSButton() 
    button.title = "" 
    button.bezelStyle = .texturedSquare 
    button.isBordered = false //Important 
    button.wantsLayer = true 
    button.layer?.backgroundColor = NSColor.red.cgColor 
0

一種方法是創建的按鈕後面的視圖,並設置的所述顏色。這將創建具有相同框架的視圖,並將按鈕放在視圖頂部。我在按鈕上使用了一個標籤,以確保我們只添加一次視圖,因此可以在繪製UI時重複調用該方法。

我已經包含了設置文本顏色的代碼。

按照需要更改顏色和Alpha:

NSColor *colour = [NSColor colorWithRed:0.0 green:0.0 blue:1.0 alpha:0.5] ; 
[self styleButton:button colour:colour] ; 

-(void) styleButton:(NSButton *)button colour:(NSColor *)colour { 

    [self setButton:button fontColor:[NSColor whiteColor]]; 

    if(button.tag == 9901) return ; 

    button.bezelStyle = NSBezelStyleTexturedSquare ; 
    [button setBordered:NO]; 

    NSView *b2 = [[NSView alloc] initWithFrame:button.frame] ; 
    [button.superview addSubview:b2] ; 

    b2.layer.backgroundColor = colour.CGColor; 

    [button removeFromSuperview]; 
    [b2.superview addSubview:button]; 

    button.tag = 9901 ; 
} 

-(void) setButton:(NSButton *)button fontColor:(NSColor *)color { 
    NSMutableAttributedString *colorTitle = [[NSMutableAttributedString alloc] initWithAttributedString:[button attributedTitle]]; 
    [colorTitle addAttribute:NSForegroundColorAttributeName value:color range:NSMakeRange(0, button.attributedTitle.length)]; 
    [button setAttributedTitle:colorTitle]; 
}