归因文本的颜色如何继承父颜色?

时间:2017-09-05 03:15:17

标签: swift string nsmutableattributedstring

例如,我必须输入一个字符串“Hello,world!”在UIButton

和“你好”,“世界!”应该是不同的颜色。

“你好”,默认颜色为UIButton,“世界!”具有NSMutableAttributedString的自定义颜色。

我再次用代码和结果解释。

// Using a library `SwiftyAttributes`(https://github.com/eddiekaiger/SwiftyAttributes)
button.attributedText = "Hello, ".withJust() + "world!".withTextColor(.red)

button.setTitleColor(.black, for: .normal)

我想:你好,(黑色)世界!(红色)

button.setTitleColor(.red, for: .normal)

我想:你好,(红色)世界!(红色)

button.setTitleColor(.blue, for: .normal)

我想:你好,(蓝色)世界!(红色)

但总是结果是:你好,(黑色)世界!(红色)

...

也许我认为NSMutableAttributedString默认颜色的优先级高于UIButton默认颜色。

但我可以看到我想要的结果吗?

2 个答案:

答案 0 :(得分:0)

您似乎想象标题颜色与属性字符串中的颜色之间存在某种“继承”。没有。它们之间没有任何关系。

一旦开始使用attributedText,您就完全负责文本中的颜色。色调颜色和标题颜色变得完全无关。如果你想要蓝色的Hello,你必须中将设置为蓝色

答案 1 :(得分:0)

您确实应该NSMutableAttributedString用于此目的,但是您应该建立NSMutableAttributedString而不是像您一样。以下是一些开始使用的代码:

let attrStr = NSMutableAttributedString(string: "Hello World")
attrStr.addAttribute(NSForegroundColorAttributeName, value: UIColor.blue, range: NSRange(location: 0, length: 5))
attrStr.addAttribute(NSForegroundColorAttributeName, value: UIColor.red, range: NSRange(location: 6, length: 5))
button.setAttributedTitle(attrStr, for: .normal)

请注意,location是您要开始着色的地方,length是您要停止的位置。因此Hello变为location: 0length: 5

<强>输出:
enter image description here