如何仅更改打印标签中的可变颜色

时间:2017-08-15 13:49:07

标签: swift3

我想仅为像这样的元组打印中的变量更改颜色

result.text = ("\(var1) candy  " + " of: \(var2) blablabla")

现在,我怎样才能改变" var1"的颜色?来自检查员的" var2",我为标签设置了红色,但它不可能只为变量改变颜色。

非常感谢

1 个答案:

答案 0 :(得分:0)

你要做的是为每种颜色创建一个属性字符串(让我们说蓝色和黄色):

let t : NSAttributedString = NSAttributedString(string: "Hi", attributes: [NSForegroundColorAttributeName : UIColor.blue])

let t2 : NSAttributedString = NSAttributedString(string: " There", attributes: [NSForegroundColorAttributeName : UIColor.yellow])

如果你想加入他们:

let final = NSMutableAttributedString(attributedString: t)

final.append(t2)

<强>更新

因此,在您的情况下,由于您要为结果字符串的两个不同部分着色,因此您需要使用NSRange方法。所以这样的方法:

func colorTheVariables(_ var1Value: String,_ var2Value: String) {

        let middle = " candy of: ".characters.count

        let value = "\(var1Value) candy of : \(var2Value)"

        let text = NSMutableAttributedString(string: value)

        let range1 = NSRange(location: 0, length: var1Value.characters.count)
        let range2 = NSRange(location: range1.length + middle, length: var2Value.characters.count)

        text.addAttribute(NSForegroundColorAttributeName, value: var1Color, range: range1)
        text.addAttribute(NSForegroundColorAttributeName, value: var2Color, range: range2)

        result.attributedText = text
    }

应该为var1和var 2提供所需的颜色。将文本应用于标签的attributedText,而不是文本,这一点非常重要。打印result.text应该为您提供标签的内容,但打印result.attributedText将为您提供奇怪的nsAttributed字符串打印。