2010-10-17 39 views
6

¿Cómo puedo tener un UILabel con dos colores diferentes para la fuente? Tendré texto en dos cadenas diferentes y quiero hacer texto con la primera cadena como rojo y el segundo como verde. La longitud de ambas cadenas es variable.UILabel con texto de dos colores diferentes

+0

Tuve que hacer eso también en un proyecto. Utilicé esta clase de otra publicación, pero es solo para una línea ** única **, no sé si es suficiente para ti. [iPhone - UILabel contiene texto con varias fuentes al mismo tiempo] (http://stackoverflow.com/questions/1417346/iphone-uilabel-containing-text-with-multiple-fonts-at-the-same-time) –

Respuesta

7

No puede hacer esto dentro de un UILabel s. Pero mi sugerencia es que, en lugar de usar UILabel, solo concéntrese en NSAttributedString. Busque UIControllers que dibuja NSAttributedString porque UILabel, UITextView no admite NSAttributedString.

PD: si va a distribuir una aplicación iOS 6 o posterior, como UILabel ahora son compatibles con NSAttributedString, se debe utilizar UILabel directamente en lugar de OHAttributedLabel como ahora es compatible de forma nativa por el sistema operativo.

+0

Esta respuesta ya no es correcta porque, por ejemplo, UILabel admite NSAttributedString desde iOS 6. – brainray

+0

@brainray He actualizado la respuesta a fines del año mismo. Compruébelo por favor. – KingofBliss

4

UILabel solo puede tener un color. O necesita un elemento más sofisticado o, probablemente más fácil, simplemente use dos etiquetas separadas. Use [yourLabel sizeToFit]; y colóquelos según corresponda.

+0

okkk intentaré explorar la propiedad sizeToFit de uilabel, gracias por responder – pankaj

8

Probar TTTAttributedLabel. Es una subclase de UILabel que admite NSAttributedString s, lo que facilitaría tener varios colores, fuentes y estilos en la misma cadena.


Editar: Como alternativa, si no desea que la tercera parte y la dependencia está apuntando el IOS 6, UILabel ahora tiene la propiedad attributedText.

+1

Bueno. NSAttributedString es definitivamente el camino a seguir, y la clase que sugieres parece muy agradable. – iceydee

0

En iOS 6, UILabel tiene la propiedad NSAttributedString. Entonces usa eso.

1

Swift 4
(Nota: notación para una cadena con atributos clave se cambia en rápida 4)

Aquí es una extensión para NSMutableAttributedString, que se suman/juego de colores en la cuerda/texto.

extension NSMutableAttributedString { 

    func setColor(color: UIColor, forText stringValue: String) { 
     let range: NSRange = self.mutableString.range(of: stringValue, options: .caseInsensitive) 
     self.addAttribute(NSAttributedStringKey.foregroundColor, value: color, range: range) 
    } 

} 

Ahora, trata por encima de la extensión con UILabel y ver el resultado

let label = UILabel() 
label.frame = CGRect(x: 40, y: 100, width: 280, height: 200) 
let red = "red" 
let blue = "blue" 
let green = "green" 
let stringValue = "\(red)\n\(blue)\n&\n\(green)" 
label.textColor = UIColor.lightGray 
label.numberOfLines = 0 
let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: stringValue) 
attributedString.setColor(color: UIColor.red, forText: red) // or use direct value for text "red" 
attributedString.setColor(color: UIColor.blue, forText: blue) // or use direct value for text "blue" 
attributedString.setColor(color: UIColor.green, forText: green) // or use direct value for text "green" 
label.font = UIFont.systemFont(ofSize: 26) 
label.attributedText = attributedString 
self.view.addSubview(label) 


Aquí está la solución de 3 Swift:

extension NSMutableAttributedString { 
     func setColorForText(textToFind: String, withColor color: UIColor) { 
     let range: NSRange = self.mutableString.range(of: textToFind, options: .caseInsensitive) 
      if range != nil { 
      self.addAttribute(NSForegroundColorAttributeName, value: color, range: range) 
      } 
     } 

} 


func multicolorTextLabel() { 
     var string: NSMutableAttributedString = NSMutableAttributedString(string: "red\nblue\n&\ngreen") 
     string.setColorForText(textToFind: "red", withColor: UIColor.red) 
     string.setColorForText(textToFind: "blue", withColor: UIColor.blue) 
     string.setColorForText(textToFind: "green", withColor: UIColor.green) 
     labelObject.attributedText = string 
    } 

Resultado:

enter image description here

+0

Acabo de probar esto en iOS 11 y obtuve un error en la extensión .. self.addAttributes ([NSForegroundColorAttributeName: color], range: range) – August

+0

@August - Comparta el mensaje de error. También avíseme la versión rápida de su proyecto. Puede estar intentando con la extensión Swift 3 y su proyecto tiene Swift 4. Comparta información relacionada con el error, para que pueda ayudarlo. – Krunal

+0

Sí, es un proyecto Swift 4 y usó la extensión Swift 4 que compartió. Fue un error de sintaxis, no un error de compilación/tiempo de ejecución. Doc »https://developer.apple.com/documentation/foundation/nsmutableattributedstring/1414304-addattributes – August

Cuestiones relacionadas