在Swift中使用NSMutableAttributedString更改特定的文本颜色
我遇到的问题是,我希望能够更改TextView中某些文本的textColor。 我正在使用连接的string,只是想要将string附加到TextView的文本中。 看来,我想使用的是NSMutableAttributedString
,但我没有find任何资源如何在Swift中使用它。 我到目前为止是这样的:
let string = "A \(stringOne) with \(stringTwo)" var attributedString = NSMutableAttributedString(string: string) textView.attributedText = attributedString
从这里我知道我需要find需要更改textColor的单词范围,然后将它们添加到属性string中。 我需要知道的是如何从其中find正确的string,然后更改textColor。
由于我的评分太低,我不能回答我自己的问题,但这是我find的答案
我通过翻译一些代码翻译来find自己的答案
更改NSAttributedString中子string的属性
这里是Swift实现的例子:
let string = "A \(stringOne) and \(stringTwo)" var attributedString = NSMutableAttributedString(string:string) let stringOneRegex = NSRegularExpression(pattern: nameString, options: nil, error: nil) let stringOneMatches = stringOneRegex.matchesInString(longString, options: nil, range: NSMakeRange(0, attributedString.length)) for stringOneMatch in stringOneMatches { let wordRange = stringOneMatch.rangeAtIndex(0) attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.nameColor(), range: wordRange) } textView.attributedText = attributedString
由于我想改变多个string的textColor,我会做一个帮助函数来处理这个,但是这个工作,以改变textColor。
我看到你已经回答了这个问题,但是提供一个更简洁的方法,而不使用正则expression式来回答标题问题:
要更改文本长度的颜色,您需要知道string中待着色字符的开始和结束索引,例如
var main_string = "Hello World" var string_to_color = "World" var range = (main_string as NSString).rangeOfString(string_to_color)
然后你转换为属性string,并使用“添加属性”与NSForegroundColorAttributeName:
var attributedString = NSMutableAttributedString(string:main_string) attributedString.addAttribute(NSForegroundColorAttributeName, value: NSColor.redColor() , range: range)
Apple的文档中可以find您可以设置的其他标准属性列表
Swift 2.1更新:
let text = "We tried to make this app as most intuitive as possible for you. If you have any questions don't hesitate to ask us. For a detailed manual just click here." let linkTextWithColor = "click here" let range = (text as NSString).rangeOfString(linkTextWithColor) let attributedString = NSMutableAttributedString(string:text) attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor() , range: range) self.helpText.attributedText = attributedString
self.helpText
是一个UILabel
sockets。
SWIFT 3.0
let txtfield1 :UITextField! var main_string = "Hello World" let string_to_color = "World" let range = (main_string as NSString).range(of: string_to_color) let attribute = NSMutableAttributedString.init(string: main_string) attribute.addAttribute(NSForegroundColorAttributeName, value: UIColor.red , range: range) txtfield1 = UITextField.init(frame:CGRect(x:10 , y:20 ,width:100 , height:100)) txtfield1.attributedText = attribute
答复已经在以前的post,但我有一个不同的方式做到这一点
Swift 3x:
var myMutableString = NSMutableAttributedString() myMutableString = NSMutableAttributedString(string: "Your full label textString") myMutableString.setAttributes([NSFontAttributeName : UIFont(name: "HelveticaNeue-Light", size: CGFloat(17.0))! , NSForegroundColorAttributeName : UIColor(red: 232 / 255.0, green: 117 / 255.0, blue: 40 / 255.0, alpha: 1.0)], range: NSRange(location:12,length:8)) // What ever range you want to give yourLabel.attributedText = myMutableString
希望这有助于任何人!
克里斯的回答对我很有帮助,所以我用他的方法,变成了一个可以重用的函数。 这让我给一个子string赋予一个颜色,同时给string的其余部分另外一个颜色。
static func createAttributedString(fullString: String, fullStringColor: UIColor, subString: String, subStringColor: UIColor) -> NSMutableAttributedString { let range = (fullString as NSString).rangeOfString(subString) let attributedString = NSMutableAttributedString(string:fullString) attributedString.addAttribute(NSForegroundColorAttributeName, value: fullStringColor, range: NSRange(location: 0, length: fullString.characters.count)) attributedString.addAttribute(NSForegroundColorAttributeName, value: subStringColor, range: range) return attributedString }
Swift 2.2
var myMutableString = NSMutableAttributedString() myMutableString = NSMutableAttributedString(string: "1234567890", attributes: [NSFontAttributeName:UIFont(name: kDefaultFontName, size: 14.0)!]) myMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor(red: 0.0/255.0, green: 125.0/255.0, blue: 179.0/255.0, alpha: 1.0), range: NSRange(location:0,length:5)) self.lblPhone.attributedText = myMutableString
如果你正在使用Swift 3x和UITextView,也许NSForegroundColorAttributeName将无法正常工作(无论我尝试什么方法,它都不适用于我)。
所以,经过一番挖掘,我发现了一个解决scheme。
//Get the textView somehow let textView = UITextView() //Set the attributed string with links to it textView.attributedString = attributedString //Set the tint color. It will apply to the link only textView.tintColor = UIColor.red
在属性检查器中,使用不同风格(如颜色,字体等)标签的最简单方法是使用属性“归因”。 只要select文本的一部分,并像你想要的那样改变它