我正在尝试检查属性字符串中特定单词的颜色。我可以访问该属性,但无法将此属性字典转换为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类
我尝试了所有常用的颜色搜索:尝试加载为CGColor
,CIColor
,加载CGColorGetComponents
,将其加载为NSString
,加载它是id
,看看这是否能更好地解决这个问题。
我觉得这对我对UIColor
和NSColor
对象的理解存在问题,但我发现的信息很少,有助于在两者之间进行转换。
答案 0 :(得分:0)
@"NSColor"
尽管巧合地分享了AppKit类的名称,但它只是NSForegroundColorAttributeName
常量的原始值。在iOS上,这被记录为UIColor
。因此,您应该能够attrs[NSForegroundColorAttributeName]
,将其投放到UIColor
并使用它。