2011-06-16 69 views
8

由於某些原因,當我的按鈕被禁用時,文本顏色變爲白色。 我希望它保持黑色 - 我該怎麼做?通過下拉菜單更改狀態正常,高亮,殘疾人等NSButton - 在禁用模式下設置文本顏色

你可以做,在Interface Builder:

+0

你可能已經試過button.textcolor = [UIColor blackColor];但爲了以防萬一 – Radu 2011-06-16 12:01:22

回答

-3

可以爲一個按鈕的不同狀態設置文本,圖像,顏色,字體等。名單。

+0

我無法在IB中找到此選項 – 2011-06-16 12:27:58

+4

nsbutton顏色並非如此。 – 2012-04-20 13:15:04

+0

@ErikSapir - 既然你接受了這個答案,我想你會發現IB在哪裏。你可以和我們其他人分享嗎? – pepsi 2012-05-29 20:21:49

24

你也可以繼承NSButtonCell並重寫的方法:

- (NSRect)drawTitle:(NSAttributedString *)title withFrame:(NSRect)frame inView:(NSView *)controlView 
{ 
    if (![self isEnabled]) { 
     return [super drawTitle:[self attributedTitle] withFrame:frame inView:controlView]; 
    } 

    return [super drawTitle:title withFrame:frame inView:controlView]; 
} 

這樣,當按鈕被禁用,文本將有文字相同顏色被啓用按鈕時。

+0

這似乎是最好的解決方案。 – jrc 2012-08-30 13:18:55

+0

謝謝!這個效果很好! – Tommy 2017-03-21 12:51:34

7

還檢查了該

[btnInfo.cell setImageDimsWhenDisabled:NO]; 
+0

這適用於我。這是最好的答案。 – Mazyod 2013-08-13 03:29:22

+2

不適用於我,文字顏色變暗 – 2014-11-10 23:41:18

2

您可以覆蓋NSButtonCell的私有方法:

- (BOOL)_textDimsWhenDisabled { 
    return NO; 
} 

- (BOOL)_shouldDrawTextWithDisabledAppearance { 
    return NO; 
} 

我填補了雷達的公共方法:rdar:// 19218619

0

更新爲迅捷4:

override func drawTitle(_ title: NSAttributedString, withFrame frame: NSRect, in controlView: NSView) -> NSRect { 

    if !self.isEnabled { 
     return super.drawTitle(self.attributedTitle, withFrame: frame, in: controlView) 
    } 

    return super.drawTitle(title, withFrame: frame, in: controlView) 
    } 

這將使文本屬性與啓用按鈕時相同。