NSButton - 在禁用模式下设置文本颜色

时间:2011-06-16 10:39:08

标签: objective-c cocoa macos nsbutton

出于某种原因,当我的按钮被禁用时,文本颜色变为白色。 我希望它保持黑色 - 我该怎么做?

6 个答案:

答案 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中执行此操作。

相关问题