NSSegmentedControl(子类NSSegmentCell)文本颜色

时间:2013-10-14 11:03:25

标签: cocoa subclass textcolor nssegmentedcontrol

我为源列表创建了一个NSSegmentedControl多个徽章。第一个段具有绿色,并显示符合不同规则的项目数。第二段具有红色并计算不匹配的规则。 NSSegmentedControl处于禁用状态,以便用户无法点击它。文本颜色为灰色,因为它禁用。

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

[self setAttributedStringValue:string];

1 个答案:

答案 0 :(得分:0)

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

要设置属性字符串的文本颜色,您必须使用键NSColorNSForegroundColorAttributeName对象添加到属性字符串的属性字典中。我会告诉你一些我知道怎么做的方法。

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

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