例如,我必须输入一个字符串“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
默认颜色。
但我可以看到我想要的结果吗?
答案 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: 0
和length: 5
。