现在我有一个CFAttributedString,并且整个字符串中的属性不相同,例如,索引0-2是蓝色,3-5是黑色,我想更改它的文本,但不要改变属性,我想复制字符串,但我并不总是知道属性何时开始不同,CFAttributedStringGetAttributes只能指定一个位置来获取属性,是否有任何好的方法来复制字符串中的属性分别?或者我可以只更改字符串而不是属性?
答案 0 :(得分:0)
你还没有解释为什么我们必须在CFAttributedString世界中这样做,我当然不能想到这样做的理由,所以这里是如何在NSAttributedString中做到这一点的基本概要世界。基本上,您只需遍历第一个字符串的属性并将它们分配给第二个字符串:
// index 0-2 are blue and 3-5 are black
let s = NSMutableAttributedString(string: "blublack", attributes: [
NSForegroundColorAttributeName : UIColor.blackColor()
])
s.addAttributes(
[NSForegroundColorAttributeName : UIColor.blueColor()],
range: NSMakeRange(0,3)
)
// I want to change the text of it,
// but don't alter the attributes
let s2 = NSMutableAttributedString(string: "12345678")
s.enumerateAttributesInRange(NSMakeRange(0,s.length), options: nil, usingBlock: {
d,r,_ in
s2.addAttributes(d, range: r)
})
这给出了期望的结果。当然,如果字符串长度不同,你也必须问自己该怎么做,但你没有在你的问题中提供任何规范,所以处理这个问题留给读者练习。 / p>