macos - NSButton attributeTitle 在按钮按下时改变颜色

标签 macos cocoa checkbox macos-mojave nscolor

我创建了一个带有按钮的 Cocoa 应用程序,具有“Check”样式和“Switch”类型。它被设置为自定义类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],则颜色会在鼠标按下时切换。这种行为是否记录在某处?这是故意的还是错误?

最佳答案

就您而言,您可能希望子类化 NSButtonCell 并重写一些方法。

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

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

这是许多令人沮丧的按钮绘制问题之一。在尝试根据我的需要调整 NSButtonCell 绘图后,我最终自己绘制了所有内容。 我从古老但很棒的 BGHUDAppKit 开始,并对它进行了大量修改以满足我的需求。 BGHUDAppKit 是巨大的,但至少现在我可以轻松调试或解决大多数绘图错误。我对所有在尝试支持 Mojave 黑暗模式时遇到类似错误的人表示同情。

关于macos - NSButton attributeTitle 在按钮按下时改变颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52832446/

相关文章:

javascript - 如何在javascript中获取复选框的标签值

javascript - Angular 复选框问题

swift - 如何在 OSX、Xcode 8、Swift 3 中实现单选按钮?

ios - 如何在用户退出时保存当前选项卡栏项目并在重新启动时重新加载到该项目?

android -/dev/kvm 在 Mac OS 上找不到

objective-c - 奇怪的 NSLog 行为 : NSLog displaying window controller's window

macos - 拉伸(stretch) NSImage 以制作类似 iMessage 的气泡

javascript - 即使只有一个被选中,jQuery 也会返回所有选中的复选框

swift - 空初始 View Controller ,未调用 viewWillAppear() 和 viewDidAppear()

OS X 上的 Java 应用程序 : Where is the version in default About dialog taken from?