出于某种原因,当我的按钮被禁用时,文本颜色变为白色。 我希望它保持黑色 - 我该怎么做?
答案 0 :(得分:26)
您可以继承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];
}
这样,当按钮被禁用时,启用按钮时文本将具有相同的文本颜色。
答案 1 :(得分:7)
同时查看
[btnInfo.cell setImageDimsWhenDisabled:NO];
答案 2 :(得分:2)
您可以覆盖NSButtonCell中的私有方法:
- (BOOL)_textDimsWhenDisabled {
return NO;
}
- (BOOL)_shouldDrawTextWithDisabledAppearance {
return NO;
}
我填写了一个公共方法的雷达:rdar:// 19218619
答案 3 :(得分:1)
在Mojave中,任何覆盖draw方法的操作都使其无法在突出显示时更改NSbutton的backgroundColor。所以我宁愿建议使用
- (BOOL)_shouldDrawTextWithDisabledAppearance
为此目的。如果您使用的是Swift 4,我将在Bridging标头中执行以下操作:
#import <AppKit/AppKit.h>
@interface NSButtonCell (Private)
- (BOOL)_shouldDrawTextWithDisabledAppearance;
@end
在NSButtonCell的子类中:
override func _shouldDrawTextWithDisabledAppearance() -> Bool {
return false
}
答案 4 :(得分:0)
更新swift 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)
}
这将使文本属性与启用按钮时相同。
答案 5 :(得分:-6)
您可以为按钮的不同状态设置文本,图像,颜色,字体等:正常,突出显示,禁用等。
您可以通过使用下拉列表更改状态在Interface Builder中执行此操作。