NSButton attributedTitle在按下按钮时更改颜色

时间:2018-10-16 09:39:46

标签: macos cocoa checkbox macos-mojave nscolor

我创建了一个带有按钮的Cocoa应用程序,其样式为“检查”和“切换”。它设置为自定义类MyButton

@interface MyButton : NSButton
- (void)awakeFromNib;
@end

此自定义类设置attributedTitle

@implementation MyButton
- (void)awakeFromNib {
    [super awakeFromNib];       
    [self setAttributedTitle:[[NSAttributedString alloc] initWithString:@"Hallo" attributes:@{
    }]];
}
@end

选中该按钮后,鼠标向下移动时字体颜色就会改变。

我读了NSAttributedString's default color is black,但是当我将其显式设置为黑色时,鼠标按下时它将保持黑色。如果我明确要求[NSColor controlTextColor],则将鼠标向下滑动颜色。此行为记录在某处吗?是故意的还是错误的?

1 个答案:

答案 0 :(得分:1)

在您的情况下,您可能希望继承NSButtonCell并重写某些方法。

一种可能的途径是重写NSCell的方法

- (NSColor *)highlightColorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView

这是许多令人沮丧的按钮绘制问题之一。在尝试将NSButtonCell的绘制弯曲到我的需要之后,我最终自己绘制了所有内容。 我从古老但很棒的BGHUDAppKit开始,并对其进行了大量修改以满足我的需求。 BGHUDAppKit非常可怕,但是至少现在我可以轻松调试或解决大多数绘图错误。我对所有尝试支持Mojave暗模式的人都会遇到与此类似的错误。