ios - nsforegroundcolorattributename - uilabel attributedtext




使用Swift中的NSMutableAttributedString更改特定文本的顏色 (8)

Swift 4.1

NSAttributedStringKey.foregroundColor

例如,如果要在NavBar中更改字體:

self.navigationController?.navigationBar.titleTextAttributes = [ NSAttributedStringKey.font: UIFont.systemFont(ofSize: 22), NSAttributedStringKey.foregroundColor: UIColor.white]

我遇到的問題是我希望能夠在TextView中更改某些文本的textColor。 我使用的是串聯字符串,只是希望我附加到TextView文本中的字符串。 看來我想要使用的是NSMutableAttributedString ,但我找不到任何有關如何在Swift中使用它的資源。 到目前為止我所擁有的是這樣的:

let string = "A \(stringOne) with \(stringTwo)"
var attributedString = NSMutableAttributedString(string: string)
textView.attributedText = attributedString

從這裡我知道我需要找到需要更改textColor的單詞範圍,然後將它們添加到屬性字符串中。 我需要知道的是如何從attributionString中找到正確的字符串,然後更改它們的textColor。

由於我的評分太低,我無法回答我自己的問題,但這是我找到的答案

我通過翻譯來翻譯一些代碼來找到我自己的答案

更改NSAttributedString中子字符串的屬性

以下是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

由於我想要更改多個字符串的textColor,我將創建一個幫助函數來處理它,但這適用於更改textColor。


Swift 4.1

我已經改變了這個在Swift 3中

let str = "Welcome "
let welcomeAttribute = [ NSForegroundColorAttributeName: UIColor.blue()]
let welcomeAttrString = NSMutableAttributedString(string: str, attributes: welcomeAttribute)

這在Swift 4.0中

let str = "Welcome "
let welcomeAttribute = [ NSAttributedStringKey.foregroundColor: UIColor.blue()]
let welcomeAttrString = NSMutableAttributedString(string: str, attributes: welcomeAttribute)

Swift 4.1

let str = "Welcome "
let welcomeAttribute = [ NSAttributedStringKey(rawValue: NSForegroundColorAttributeName): UIColor.blue()]
let welcomeAttrString = NSMutableAttributedString(string: str, attributes: welcomeAttribute)

工作正常


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插座。


使用不同樣式(如顏色,字體等)進行標註的最簡單方法是在屬性檢查器中使用屬性“屬性”。 只需選擇部分文本並根據需要進行更改即可


在之前的帖子中已經給出了答案,但我有不同的方法

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

希望這對任何人都有幫助!


基於我創建字符串擴展之前的答案

extension String {

func highlightWordsIn(highlightedWords: String, attributes: [[NSAttributedStringKey: Any]]) -> NSMutableAttributedString {
     let range = (self as NSString).range(of: highlightedWords)
     let result = NSMutableAttributedString(string: self)

     for attribute in attributes {
         result.addAttributes(attribute, range: range)
     }

     return result
    }
}

您可以將文本的屬性傳遞給方法

像這樣打電話

  let attributes = [[NSAttributedStringKey.foregroundColor:UIColor.red], [NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 17)]]
  myLabel.attributedText = "This is a text".highlightWordsIn(highlightedWords: "is a text", attributes: attributes)

我看到你在某種程度上回答了這個問題,但是在不使用正則表達式回答標題問題的情況下提供一種更簡潔的方法:

要更改文本長度的顏色,您需要知道字符串中有顏色字符的開始和結束索引,例如

var main_string = "Hello World"
var string_to_color = "World"

var range = (main_string as NSString).rangeOfString(string_to_color)

然後轉換為屬性字符串並使用NSForegroundColorAttributeName的'add attribute':

var attributedString = NSMutableAttributedString(string:main_string)
attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor() , range: range)

您可以設置的其他標準屬性列表可以在Apple的文檔中找到


斯威夫特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






nsmutableattributedstring