我正在尝试将颜色添加到字符串中的2个单词。这是我正在使用的代码:
var HighScore:Int = 0
var CurrentScore:Int = 0
let stringOne = "You have managed to score \(CurrentScore). Current record is \(self.HighScore). Play again and give it another try!"
let stringTwo = "\(CurrentScore)"
let stringThree = "\(HighScore)"
let range1 = (stringOne as NSString).range(of: stringTwo)
let range2 = (stringOne as NSString).range(of: stringThree)
let attributedText = NSMutableAttributedString.init(string: stringOne)
attributedText.addAttribute(NSForegroundColorAttributeName, value: UIColor.init(netHex: 0x00b4ff) , range: range1)
attributedText.addAttribute(NSForegroundColorAttributeName, value: UIColor.init(netHex: 0x00b4ff) , range: range2)
gameOverDescriptionLabel.attributedText = attributedText
我遇到的问题是,如果CurrentScore
和HighScore
相同(例如:2& 2),range2
上的颜色仍为白色,但如果不是等于(2& 1或1& 2)都得到我选择的颜色。
有什么建议吗?
答案 0 :(得分:1)
如果当前得分和高分是相同的字符串,则搜索后者会找到前者(因为搜索从头开始)。
还有很多其他更好的方法可以做到这一点。
在第一次搜索结果之后开始的范围内执行第二次搜索(range(of:)
有range:
parameter,但您没有使用它)< / p>
不是寻找高分的范围,而是搜索周围的样板(“你已经设法得分”等等)并找出数字必须在哪里。
使用NSScanner或正则表达式查找字符串中嵌入的数字表达式。
我的最爱:使用“隐身”属性标记每个数字并搜索该属性,以便您可以可靠地找到这些数字(例如here)。
答案 1 :(得分:1)
将其添加到.swift
文件的顶部或底部:
extension NSMutableAttributedString {
func bold(_ text:String) -> NSMutableAttributedString {
let attrs:[String:AnyObject] = [NSForegroundColorAttributeName: UIColor.init(netHex: 0x00b4ff)]
let boldString = NSMutableAttributedString(string:"\(text)", attributes:attrs)
self.append(boldString)
return self
}
func normal(_ text:String)->NSMutableAttributedString {
let normal = NSAttributedString(string: text)
self.append(normal)
return self
}
}
下面的代码是用法,您可以按照自己喜欢的方式进行编辑,但我已经做到了这一点,您可以轻松地将其复制并粘贴到您的项目中:
let formattedString = NSMutableAttributedString()
formattedString
.normal("You have managed to score ")
.bold("\(CurrentScore)")
.normal(". Current record is ")
.bold("\(HighScore)")
.normal(". Play again and give it another try!")
gameOverDescriptionLabel.attributedText = formattedString
答案 2 :(得分:0)
不搜索范围的解决方案是为当前得分和高分创建2个单独的NSMutableAttributedString,然后将所有内容附加在一起。
let currentScoreString = NSMutableAttributedString(...)
let highscoreString = NSMutableAttributedString(...)
let finalString = NSMutableAttributedString(string: "You have managed to score ").append(currentScoreString)....
答案 3 :(得分:0)
//MARK: forgroundColor
open var foregroundColor: UIColor? {
didSet {
textAttributes[NSForegroundColorAttributeName] = foregroundColor
self.attributedText = NSAttributedString(string: self.text, attributes: textAttributes)
}
}
//MARK: backgroundColor
open var textBackgroundColor: UIColor? {
didSet {
textAttributes[NSBackgroundColorAttributeName] = textBackgroundColor
self.attributedText = NSAttributedString(string: self.text, attributes: textAttributes)
}
}