【问题标题】:NSButton attributedTitle changes color on button downNSButton 属性标题在按钮按下时改变颜色
【发布时间】:2018-10-18 05:08:26
【问题描述】:

我创建了一个带有按钮的 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],颜色会在鼠标按下时切换。这种行为是否记录在某处?这是故意的还是错误的?

【问题讨论】:

  • 您是否尝试设置attributedAlternateTitle
  • @AlejandroCotilla 我做了(使用相同的参数),但这并没有解决问题。

标签: macos cocoa checkbox macos-mojave nscolor


【解决方案1】:

在您的情况下,您可能希望继承 NSButtonCell 并覆盖一些方法。

一种可能的途径是覆盖 NSCell 的方法

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

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

【讨论】:

  • 感谢您的建议。我完全放弃使用NSAttributedString,现在只使用setFont,目前看来效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 2014-10-28
  • 1970-01-01
  • 2023-02-21
  • 2018-11-12
  • 1970-01-01
相关资源
最近更新 更多