在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是一个UILabelsockets。

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文本的一部分,并像你想要的那样改变它

在这里输入图像说明