NSButton - установить цвет текста в отключенном режиме - PullRequest
10 голосов
/ 16 июня 2011

По какой-то причине, когда моя кнопка отключена, цвет текста становится белым.Я хочу, чтобы он оставался черным - как я могу это сделать?

Ответы [ 6 ]

27 голосов
/ 17 мая 2012

Вы можете создать подкласс 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];
}

Таким образом, когда кнопка отключена, текст будет иметь тот же цвет текста, когда кнопка включена.

7 голосов
/ 24 мая 2013

Также проверьте это

[btnInfo.cell setImageDimsWhenDisabled:NO];
2 голосов
/ 11 декабря 2014

Вы можете переопределить закрытый метод в NSButtonCell:

- (BOOL)_textDimsWhenDisabled {
    return NO;
}

- (BOOL)_shouldDrawTextWithDisabledAppearance {
    return NO;
}

Я заполнил радар для публичного метода: rdar: // 19218619

1 голос
/ 11 декабря 2018

В Mojave любое переопределение методов рисования делает невозможным изменение backgroundColor кнопки NS при выделении.Поэтому я бы рекомендовал использовать для этой цели

- (BOOL)_shouldDrawTextWithDisabledAppearance

.Если вы используете Swift 4, я бы сделал следующее в заголовке Bridging:

#import <AppKit/AppKit.h>
@interface NSButtonCell (Private)
- (BOOL)_shouldDrawTextWithDisabledAppearance;
@end

И в подклассе NSButtonCell:

override func _shouldDrawTextWithDisabledAppearance() -> Bool {
    return false
}
0 голосов
/ 16 февраля 2018

Обновление для 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)
    }

При этом атрибуты текста будут такими же, как при включенной кнопке.

0 голосов
/ 16 июня 2011

Вы можете установить текст, изображение, цвета, шрифты и т. Д. Для различных состояний кнопки: нормальный, выделенный, отключенный и т. Д.

Это можно сделать в Интерфейсном Разработчике, изменив состояние свыпадающий список.

...