从NSAttributedString将NSColor转换为UIColor

时间:2017-09-14 01:57:35

标签: ios objective-c uicolor nscolor

我正在尝试检查属性字符串中特定单词的颜色。我可以访问该属性,但无法将此属性字典转换为UIColor。

首先,我枚举了我的属性字符串,它为每个不同的属性返回属性的字典。然后,我可以仔细观察每一个。

NSAttributedString * attributes = self.textView.attributedText;

[attributes enumerateAttributesInRange:NSMakeRange(0, attributes.length) options:0 usingBlock:^(NSDictionary<NSString *,id> * _Nonnull attrs, NSRange range, BOOL * _Nonnull stop) {


}];

当我返回attrs字典时,我得到了这个(HKWMentionAttributeName是我正在使用的子类):

{
    HKWMentionAttributeName = "<0x610000243450> (HKWMentionsAttribute) text: ABC name 1, id: uY5Vv8QzBxhPoB8jTxUBeBmTaeD3, no range";
    NSColor = "UIExtendedSRGBColorSpace 1 0 0 1";
    NSFont = "<UICTFont: 0x7fd388558ce0> font-family: \".SFUIText\"; font-weight: normal; font-style: normal; font-size: 19.00pt";
}

然后我使用attrs[@"NSColor"];访问颜色,并返回如下:

UIExtendedSRGBColorSpace 1 0 0 1

我不能为我的生活弄清楚如何把它变成UIColor甚至开始使用这个对象。

我理解1 0 0 1是红色,绿色,蓝色和alpha,但我不知道如何访问它们以使用colorWithRed函数。

This link似乎暗示我需要改变颜色空间,但它没有提供更多的解释。

This link让我觉得我不应该尝试导入NSColor类,因为它是OSX类

我尝试了所有常用的颜色搜索:尝试加载为CGColorCIColor,加载CGColorGetComponents,将其加载为NSString,加载它是id,看看这是否能更好地解决这个问题。

我觉得这对我对UIColorNSColor对象的理解存在问题,但我发现的信息很少,有助于在两者之间进行转换。

1 个答案:

答案 0 :(得分:0)

@"NSColor"尽管巧合地分享了AppKit类的名称,但它只是NSForegroundColorAttributeName常量的原始值。在iOS上,这被记录为UIColor。因此,您应该能够attrs[NSForegroundColorAttributeName],将其投放到UIColor并使用它。