如何从 NSAttributed String 中分离属性并将这些属性应用于其他字符串?
How to separate attributes from a NSAttributed String and apply these attributes on other string?
例如。就像我们有一个 NSAttributed 字符串,我们需要将字符串和属性分开,然后在其他相同长度的字符串上使用这些属性。
你应该从 NSAttributedString
看看这个方法
attributesAtIndex(location: Int, effectiveRange range: NSRangePointer) -> [String : AnyObject]
通过在 NSAttributedString 中调用此方法,您将收到范围内应用的所有属性。只需将所有字符串指定为范围。然后用这些属性创建新的属性字符串。
一个 NSAttributedString 对于不同的字符串范围可能有不同的属性。
要提取这些属性,可以使用enumerateAttributesInRange
方法。
我们准备一个元组数组来保存结果:
var extractedAttributes = [(attributes: [String:AnyObject], range: NSRange)]()
每个元组将保存 NSAttributedString 中特定范围的属性。
现在我们迭代 NSAttributedString 并用结果填充数组:
attributedString.enumerateAttributesInRange(NSRange(location: 0, length: attributedString.length), options: NSAttributedStringEnumerationOptions(rawValue: 0)) { (dict, range, stopEnumerating) in
extractedAttributes.append((attributes: dict, range: range))
}
填充数组后,您可以访问内容:
for item in extractedAttributes {
print(item.attributes)
print(item.range)
}
从那里您拥有创建具有这些属性的新属性字符串所需的一切:您拥有 NSAttributedString 中每个字符串的范围和相应的属性。
例如。就像我们有一个 NSAttributed 字符串,我们需要将字符串和属性分开,然后在其他相同长度的字符串上使用这些属性。
你应该从 NSAttributedString
看看这个方法attributesAtIndex(location: Int, effectiveRange range: NSRangePointer) -> [String : AnyObject]
通过在 NSAttributedString 中调用此方法,您将收到范围内应用的所有属性。只需将所有字符串指定为范围。然后用这些属性创建新的属性字符串。
一个 NSAttributedString 对于不同的字符串范围可能有不同的属性。
要提取这些属性,可以使用enumerateAttributesInRange
方法。
我们准备一个元组数组来保存结果:
var extractedAttributes = [(attributes: [String:AnyObject], range: NSRange)]()
每个元组将保存 NSAttributedString 中特定范围的属性。
现在我们迭代 NSAttributedString 并用结果填充数组:
attributedString.enumerateAttributesInRange(NSRange(location: 0, length: attributedString.length), options: NSAttributedStringEnumerationOptions(rawValue: 0)) { (dict, range, stopEnumerating) in
extractedAttributes.append((attributes: dict, range: range))
}
填充数组后,您可以访问内容:
for item in extractedAttributes {
print(item.attributes)
print(item.range)
}
从那里您拥有创建具有这些属性的新属性字符串所需的一切:您拥有 NSAttributedString 中每个字符串的范围和相应的属性。