我有一个字符串,我想更改该字符串中两个单词的颜色。所以,我创建了一个函数
func setup()
{
let main_string = "By continuing you agree to our Term of use and Privacy Policy "
var string_to_color = ["By continuing you agree to our","and"]
for i in 0..<2
{
let range = (main_string as NSString).range(of: string_to_color[i])
let attributedString = NSMutableAttributedString.init(string:main_string)
attributedString.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.black , range: range)
privacyL.attributedText = attributedString
}
但是,它只会改变第二个单词的颜色,不会改变第一个单词的颜色。
有人能帮忙吗?
最佳答案
let main_string = "By continuing you agree to our Term of use and Privacy Policy "
var string_to_color = ["By continuing you agree to our","and"]
for i in 0..<2
{
let range = (main_string as NSString).range(of: string_to_color[i])
let attributedString = NSMutableAttributedString.init(string:main_string)
attributedString.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.black , range: range)
privacyL.attributedText = attributedString
}
你每次都在重写privacyL.attributedText
, 所以你只会得到最后一次迭代的“结果”。
相反,做:
let attributedString = NSMutableAttributedString.init(string:main_string)
for i in 0..<2
{
let range = (main_string as NSString).range(of: string_to_color[i])
attributedString.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.black , range: range)
}
privacyL.attributedText = attributedString
现在,下一期:
不要循环 for i in 0..<2
, 而不是至少使用 count
的 string_to_color
(或 for each loop )。如果明天您在其中添加一个字符串或删除一个字符串,您将遇到问题。
还有 range(of:)
将返回找到的第一次出现,所以如果你有:
let main_string = "and and"
var string_to_color = ["something", "and"]
只有第一个“and”会被着色。
然后您必须迭代或使用 NSRegularExpression
.
这是一个相关问题:Color all occurrences of string in swift
关于arrays - 更改文本颜色时的 Swift 4 数组问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49232009/