nsbutton-無効モードでテキスト色を設定します
-
28-10-2019 - |
質問
何らかの理由で、私のボタンが無効になっている場合、テキストの色は白くなります。私はそれを黒くしたいです - どうすればそれをすることができますか?
解決
ボタンの異なるステータスに対して、テキスト、画像、色、フォントなどを設定できます。通常、強調表示、無効など。
ドロップダウンリストで状態を変更することにより、インターフェイスビルダーでそれを行うことができます。
他のヒント
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];
}
このようにして、ボタンが無効になっている場合、テキストはボタンが有効になっているときに同じ色のテキストになります。
これもチェックしてください
[btnInfo.cell setImageDimsWhenDisabled:NO];
nsbuttoncellでプライベートメソッドをオーバーライドできます。
- (BOOL)_textDimsWhenDisabled {
return NO;
}
- (BOOL)_shouldDrawTextWithDisabledAppearance {
return NO;
}
私は公開方法のためにレーダーを埋めました:rdar:// 19218619
Mojaveでは、抽選方法のオーバーライドは、強調表示されたときにnsbuttonの背景色を変更することを不可能にします。したがって、使用することをお勧めします
- (BOOL)_shouldDrawTextWithDisabledAppearance
この目的のために。 Swift 4を使用している場合、ブリッジングヘッダーで次のことを行います。
#import <AppKit/AppKit.h>
@interface NSButtonCell (Private)
- (BOOL)_shouldDrawTextWithDisabledAppearance;
@end
nsbuttoncellのサブクラスで:
override func _shouldDrawTextWithDisabledAppearance() -> Bool {
return false
}
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)
}
これにより、テキスト属性がボタンが有効になっているときと同じになります。
所属していません StackOverflow