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
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
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
}