如何更改CFAttributedString的字符串而不是属性?

时间:2015-07-23 15:00:22

标签: ios nsattributedstring core-foundation

现在我有一个CFAttributedString,并且整个字符串中的属性不相同,例如,索引0-2是蓝色,3-5是黑色,我想更改它的文本,但不要改变属性,我想复制字符串,但我并不总是知道属性何时开始不同,CFAttributedStringGetAttributes只能指定一个位置来获取属性,是否有任何好的方法来复制字符串中的属性分别?或者我可以只更改字符串而不是属性?

1 个答案:

答案 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>