0

我为 Sourcelist 创建了一个NSSegmentedControl多重徽章。第一段为绿色,显示匹配不同规则的项目数。第二段为红色并计算不匹配的规则。这NSSegmentedControl是禁用的,因此用户无法单击它。文本颜色是灰色的,因为它被禁用。

如何更改文本颜色?我尝试使用“setAttributedStringValue:”方法在 NSSegmentCell 子类中设置颜色,但它不起作用。

[self setAttributedStringValue:string];
4

1 回答 1

0

我不确定这些信息是否对您有任何帮助,但如果您仍在寻找答案……</p>

要设置属性字符串的文本颜色,您必须使用键将NSColor对象添加到属性字符串的属性字典中,NSForegroundColorAttributeName。我将向您展示一些我知道如何做到这一点的方法。

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];
}

这可能是处理事情的最佳方式,也可能不是,但由于关于子类化的信息很少,这对我来说似乎是一个不错的选择。如果您已经知道所有这些,我为冗长的回答道歉。如果你不这样做,希望这会有所帮助!祝你好运。

于 2014-05-26T01:47:37.113 回答