font color ios swift uilabel nsattributedstring textcolor

ios - color - ion-toolbar



Use múltiples colores de fuente en una sola etiqueta (17)

Swift 3.0

override func viewDidLoad() { super.viewDidLoad() titleLabel.setDifferentColor(string: titleLabel.text!, location: 5, length: 4) }

Para obtener más colores, puede seguir agregando atributos a la cadena mutable. Más ejemplos here .

¿Hay alguna manera de usar dos o incluso tres colores de fuente en una sola etiqueta en iOS?

Si el texto "hola, cómo estás" se usara como ejemplo, el "hola" sería azul y el "cómo estás" sería verde.

¿Es esto posible, parece más fácil que crear varias etiquetas?


Aquí está el código que admite la última versión de Swift en marzo de 2017.

Swift 3.0

Aquí he creado una clase y método Helper para

public class Helper { static func GetAttributedText(inputText:String, location:Int,length:Int) -> NSMutableAttributedString { let attributedText = NSMutableAttributedString(string: inputText, attributes: [NSFontAttributeName:UIFont(name: "Merriweather", size: 15.0)!]) attributedText.addAttribute(NSForegroundColorAttributeName, value: UIColor(red: 0.401107, green: 0.352791, blue: 0.503067, alpha: 1.0) , range: NSRange(location:location,length:length)) return attributedText } }

En los Parámetros del método, inputText: String: el texto que se mostrará en la ubicación de la etiqueta: Int: donde el estilo debe ser la aplicación, "0" como inicio de la cadena o algún valor válido como posición de caracteres de la longitud de la cadena: Int - From la ubicación hasta cuántos caracteres es aplicable este estilo.

Consumir en otro método:

self.dateLabel?.attributedText = Helper.GetAttributedText(inputText: "Date : " + (self.myModel?.eventDate)!, location:0, length: 6)

Salida:

Nota: El color de la IU puede definirse como UIColor.red o los colores definidos por el usuario como UIColor(red: 0.401107, green: 0.352791, blue: 0.503067, alpha: 1.0)


Aquí una solución para Swift 5

let label = UILabel() let text = NSMutableAttributedString() text.append(NSAttributedString(string: "stack", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white])); text.append(NSAttributedString(string: "overflow", attributes: [NSAttributedString.Key.foregroundColor: UIColor.gray])) label.attributedText = text


Ejemplo de Swift 3 usando la versión HTML.

let encodedData = htmlString.data(using: String.Encoding.utf8)! let attributedOptions = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType] do { let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil) label.attributedText = attributedString } catch _ { print("Cannot create attributed String") }


Hacer uso de NSMutableAttributedString

let myMutableString = NSMutableAttributedString( string: "your desired text", attributes: [:]) myMutableString.addAttribute( NSForegroundColorAttributeName, value: UIColor.blue, range: NSRange( location:6, length:7))

Ver más detalles aquí swift-using-attributed-strings


Me gustó de esta manera

import UIKit import Foundation extension UILabel { func setDifferentColor(string: String, location: Int, length: Int){ let attText = NSMutableAttributedString(string: string) attText.addAttribute(NSForegroundColorAttributeName, value: UIColor.blueApp, range: NSRange(location:5,length:4)) attributedText = attText } }


Para @Hems Moradiya

let attrs1 = [NSFontAttributeName : UIFont.boldSystemFontOfSize(18), NSForegroundColorAttributeName : UIColor.greenColor()] let attrs2 = [NSFontAttributeName : UIFont.boldSystemFontOfSize(18), NSForegroundColorAttributeName : UIColor.whiteColor()] let attributedString1 = NSMutableAttributedString(string:"Drive", attributes:attrs1) let attributedString2 = NSMutableAttributedString(string:"safe", attributes:attrs2) attributedString1.appendAttributedString(attributedString2) self.lblText.attributedText = attributedString1

Swift 4

let attrs1 = [NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 18), NSAttributedStringKey.foregroundColor : UIColor.green] let attrs2 = [NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 18), NSAttributedStringKey.foregroundColor : UIColor.white] let attributedString1 = NSMutableAttributedString(string:"Drive", attributes:attrs1) let attributedString2 = NSMutableAttributedString(string:"safe", attributes:attrs2) attributedString1.append(attributedString2) self.lblText.attributedText = attributedString1


Utilice cocoapod Prestyler :

Prestyle.defineRule("*", Color.blue) Prestyle.defineRule("_", Color.red) label.attributedText = "*This text is blue*, _but this one is red_".prestyled()


para usar este NSForegroundColorAttributeName en una versión inferior rápida, puede obtener problemas de identificador sin resolver, cambie lo anterior a NSAttributedStringKey.foregroundColor .

swift lower version swift latest version

es decir, NSForegroundColorAttributeName == NSAttributedStringKey.foregroundColor


Referencia desde aquí.

En primer lugar, inicialice NSString y NSMutableAttributedString como se muestra a continuación.

var myString:NSString = "I AM KIRIT MODI" var myMutableString = NSMutableAttributedString()

En ViewDidLoad

override func viewDidLoad() { myMutableString = NSMutableAttributedString(string: myString, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: 18.0)!]) myMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: NSRange(location:2,length:4)) // set label Attribute labName.attributedText = myMutableString super.viewDidLoad() }

SALIDA

COLOR MÚLTIPLE

Agregue el código de línea a continuación en su ViewDidLoad para obtener múltiples colores en una cadena.

myMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.greenColor(), range: NSRange(location:10,length:5))

Salida de color múltiple

Swift 4

var myMutableString = NSMutableAttributedString(string: str, attributes: [NSAttributedStringKey.font :UIFont(name: "Georgia", size: 18.0)!]) myMutableString.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.red, range: NSRange(location:2,length:4))


Extensión Swift 4 UILabel

En mi caso, necesitaba poder configurar diferentes colores / fuentes dentro de las etiquetas con frecuencia, así que hice una extensión usando la extensión de Krunal.

func highlightWords(phrases: [String], withColor: UIColor?, withFont: UIFont?) { let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: self.text!) for phrase in phrases { if withColor != nil { attributedString.setColorForText(textForAttribute: phrase, withColor: withColor!) } if withFont != nil { attributedString.setFontForText(textForAttribute: phrase, withFont: withFont!) } } self.attributedText = attributedString }

Se puede usar así:

yourLabel.highlightWords(phrases: ["hello"], withColor: UIColor.blue, withFont: nil) yourLabel.highlightWords(phrases: ["how are you"], withColor: UIColor.green, withFont: nil)


Respuesta actualizada para Swift 4

Puede usar fácilmente html dentro de la propiedad atribuidaTexto de UILabel para realizar fácilmente varios formatos de texto.

let htmlString = "<font color=/"red/">This is </font> <font color=/"blue/"> some text!</font>" let encodedData = htmlString.data(using: String.Encoding.utf8)! let attributedOptions = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType] do { let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil) label.attributedText = attributedString } catch _ { print("Cannot create attributed String") }

Respuesta actualizada para Swift 2

let htmlString = "<font color=/"red/">This is </font> <font color=/"blue/"> some text!</font>" let encodedData = htmlString.dataUsingEncoding(NSUTF8StringEncoding)! let attributedOptions = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType] do { let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil) label.attributedText = attributedString } catch _ { print("Cannot create attributed String") }


SWIFT 3

En mi código, creo una extensión

myMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: NSRange(location:2,length:4))

y esto para su uso

let yourAttributes = [NSForegroundColorAttributeName: UIColor.black, NSFontAttributeName: UIFont.systemFontOfSize(15)] let yourOtherAttributes = [NSForegroundColorAttributeName: UIColor.red, NSFontAttributeName: UIFont.systemFontOfSize(25)] let partOne = NSMutableAttributedString(string: "This is an example ", attributes: yourAttributes) let partTwo = NSMutableAttributedString(string: "for the combination of Attributed String!", attributes: yourOtherAttributes) let combination = NSMutableAttributedString() combination.appendAttributedString(partOne) combination.appendAttributedString(partTwo)


Swift 4

Al usar la siguiente función de extensión, puede establecer directamente un atributo de color en una cadena atribuida y aplicar lo mismo en su etiqueta.

extension NSMutableAttributedString { func setColorForText(textForAttribute: String, withColor color: UIColor) { let range: NSRange = self.mutableString.range(of: textForAttribute, options: .caseInsensitive) // Swift 4.2 and above self.addAttribute(NSAttributedString.Key.foregroundColor, value: color, range: range) // Swift 4.1 and below self.addAttribute(NSAttributedStringKey.foregroundColor, value: color, range: range) } }

Pruebe la extensión anterior, usando una etiqueta:

let label = UILabel() label.frame = CGRect(x: 60, y: 100, width: 260, height: 50) let stringValue = "" let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: stringValue) attributedString.setColorForText(textForAttribute: "stack", withColor: UIColor.black) attributedString.setColorForText(textForAttribute: "over", withColor: UIColor.orange) attributedString.setColorForText(textForAttribute: "flow", withColor: UIColor.red) label.font = UIFont.boldSystemFont(ofSize: 40) label.attributedText = attributedString self.view.addSubview(label)

Resultado:


Swift 4.2

let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.alignment = NSTextAlignment.center var stringAlert = self.phoneNumber + "로/r로전송인증번호를입력해주세요" let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: stringAlert, attributes: [NSAttributedString.Key.paragraphStyle:paragraphStyle, .font: UIFont(name: "NotoSansCJKkr-Regular", size: 14.0)]) attributedString.setColorForText(textForAttribute: self.phoneNumber, withColor: UIColor.init(red: 1.0/255.0, green: 205/255.0, blue: 166/255.0, alpha: 1) ) attributedString.setColorForText(textForAttribute: "로/r로전송인증번호를입력해주세요", withColor: UIColor.black) self.txtLabelText.attributedText = attributedString

Resultado


rakeshbs la respuesta de rakeshbs para crear una extensión en Swift 2:

// StringExtension.swift import UIKit import Foundation extension String { var attributedStringFromHtml: NSAttributedString? { do { return try NSAttributedString(data: self.dataUsingEncoding(NSUTF8StringEncoding)!, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) } catch _ { print("Cannot create attributed String") } return nil } }

Uso:

let htmlString = "<font color=/"red/">This is </font> <font color=/"blue/"> some text!</font>" label.attributedText = htmlString.attributedStringFromHtml

O incluso para frases sencillas

label.attributedText = "<font color=/"red/">This is </font> <font color=/"blue/"> some text!</font>".attributedStringFromHtml

Lo bueno de la extensión es que tendrá el atributo .attributedStringFromHtml para todas las String toda su aplicación.


func MultiStringColor(first:String,second:String) -> NSAttributedString { let MyString1 = [NSFontAttributeName : FontSet.MonsRegular(size: 14), NSForegroundColorAttributeName : FoodConstant.PUREBLACK] let MyString2 = [NSFontAttributeName : FontSet.MonsRegular(size: 14), NSForegroundColorAttributeName : FoodConstant.GREENCOLOR] let attributedString1 = NSMutableAttributedString(string:first, attributes:MyString1) let attributedString2 = NSMutableAttributedString(string:second, attributes:MyString2) MyString1.append(MyString2) return MyString1 }