我有一个自定义的NSButton,但无论我做什么,禁用的颜色总是灰色
我尝试了所遇到的所有解决方案
我用白色前景色设置属性字符串标题(我看起来像禁用状态的颜色属性被忽略)
我确实设置了[[self cell] setImageDimsWhenDisabled:NO];
文件记录时的事件
// When disabled, the image and text of an NSButtonCell are normally dimmed with gray.
// Radio buttons and switches use (imageDimsWhenDisabled == NO) so only their text is dimmed.
@property BOOL imageDimsWhenDisabled;
它不起作用
我的NSButton使用了wantUpdateLayer YES,因此绘制方法被覆盖,但我不明白,标题是在哪里绘制的
答案 0 :(得分:3)
在OS X 10.9上,我通过对绘制按钮的单元格进行子类化,设法改变按钮文本的颜色。
在Xcode中创建一个新的NSButtonCell
子类并覆盖以下方法:
- (NSRect)drawTitle:(NSAttributedString *)title
withFrame:(NSRect)frame
inView:(NSView *)controlView {
NSDictionary *attributes = [title attributesAtIndex:0 effectiveRange:nil];
NSColor *systemDisabled = [NSColor colorWithCatalogName:@"System"
colorName:@"disabledControlTextColor"];
NSColor *buttonTextColor = attributes[NSForegroundColorAttributeName];
if (systemDisabled == buttonTextColor) {
NSMutableDictionary *newAttrs = [attributes mutableCopy];
newAttrs[NSForegroundColorAttributeName] = [NSColor orangeColor];
title = [[NSAttributedString alloc] initWithString:title.string
attributes:newAttrs];
}
return [super drawTitle:title
withFrame:frame
inView:controlView];
}
选择Xcode中的按钮,然后选择其单元格(可能最容易在Interface Builder底座中执行此操作),现在转到 Identity Inspector 并将单元格的类设置为子类的类。
答案 1 :(得分:0)
这是因为默认值为true
- (BOOL)_shouldDrawTextWithDisabledAppearance
尝试更改此方法,而不要更改imageDimsWhenDisabled。如果您使用的是Swift 4,我将在Bridging标头中执行以下操作:
#import <AppKit/AppKit.h>
@interface NSButtonCell (Private)
- (BOOL)_shouldDrawTextWithDisabledAppearance;
@end
在NSButtonCell的子类中:
override func _shouldDrawTextWithDisabledAppearance() -> Bool {
return false
}
就是这样:灰色应该消失