我为源列表创建一个NSSegmentedControl
作为多个徽章。第一个段具有绿色,并显示符合不同规则的项目计数。第二段为红色,计算不匹配的规则。NSSegmentedControl
处于禁用状态,以便用户无法单击它。文本颜色为灰色,因为它已禁用。
如何更改文本颜色?我尝试使用方法"setAttributedStringValue:"在NSSegmentCell子类中设置颜色,但它不起作用。
[self setAttributedStringValue:string];
我不确定这些信息是否会对您有任何帮助,但如果您仍在寻找答案......
若要设置属性字符串的文本颜色,必须使用键 NSForegroundColorAttributeName
将 NSColor
对象添加到属性字符串的属性字典中。我将向您展示一些我知道该怎么做的方法。
从NSString
对象创建属性字符串:
NSDictionary *attrs = @{NSForegroundColorAttributeName:[NSColor redColor]};
NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString:@"Hello"
attributes:attrs];
从现有NSAttributedString
对象:
NSMutableAttributedString *tempAttributedString = anExistingAttributedString.mutableCopy;
[tempAttributedString addAttribute:NSForegroundColorAttributeName
value:[NSColor redColor]
range:NSMakeRange(0, tempAttributedString.length)];
anExistingAttributedString = tempAttributedString;
因此,在子类中,您可能希望拦截传递给-setAttributedStringValue:
的值,如下所示:
- (void)setAttributedStringValue:(NSAttributedString *)attributedStringValue
{
NSMutableAttributedString *temp = attributedStringValue.mutableCopy;
[temp addAttribute:NSForegroundColorAttributeName
value:[NSColor redColor]
range:NSMakeRange(0, temp.length)];
[super setAttributedStringValue:temp];
}
这可能是也可能不是处理事情的最佳方式,但由于关于子类的信息很少,这对我来说似乎是一个不错的选择。如果您已经知道所有这些,那么对于冗长的答案,我深表歉意。如果你不这样做,希望这有帮助!祝你好运。