El problema que tengo es que quiero poder cambiar el color de texto de cierto texto en un TextView. Estoy usando una cadena concatenada y solo quiero las cadenas que agrego al texto de TextView. Parece que lo que quiero usar es NSMutableAttributedString
, pero no encuentro ningún recurso sobre cómo usar esto en Swift. Lo que tengo hasta ahora es algo como esto:
let string = "A \(stringOne) with \(stringTwo)"
var attributedString = NSMutableAttributedString(string: string)
textView.attributedText = attributedString
Desde aquí, sé que necesito encontrar el rango de palabras que deben cambiar su color de texto y luego agregarlas a la cadena atribuida. Lo que necesito saber es cómo encontrar las cadenas correctas del atributoString y luego cambiar su color de texto.
Como tengo una calificación demasiado baja, no puedo responder mi propia pregunta, pero aquí está la respuesta que encontré
Encontré mi propia respuesta traduciendo de la traducción de un código de
Cambiar atributos de subcadenas en una NSAttributedString
Aquí está el ejemplo de implementación en 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
Como quiero cambiar el color de texto de varias cadenas, crearé una función auxiliar para manejar esto, pero esto funciona para cambiar el color de texto.
fuente
Respuestas:
Veo que ha respondido la pregunta de alguna manera, pero para proporcionar una forma un poco más concisa sin usar expresiones regulares para responder a la pregunta del título:
Para cambiar el color de una longitud de texto, debe conocer el índice de inicio y finalización de los caracteres que se van a colorear en la cadena, por ejemplo
Luego, convierte a una cadena atribuida y usa 'agregar atributo' con NSForegroundColorAttributeName:
Puede encontrar una lista de otros atributos estándar que puede establecer en la documentación de Apple
fuente
main_string
,string_to_color
yrange
nunca fueron mutados. ¿Considera cambiarlos alet
constante?SWIFT 5
SWIFT 4.2
fuente
Actualización Swift 2.1:
self.helpText
es unaUILabel
salida.fuente
Swift 4.2 y Swift 5 colorean partes de la cuerda.
Una forma muy fácil de usar NSMutableAttributedString mientras se extiende String. Esto también se puede utilizar para colorear más de una palabra en toda la cadena.
Agregue un nuevo archivo para extensiones, Archivo -> Nuevo -> Archivo Swift con nombre por ej. "NSAttributedString + TextColouring" y agregue el código
Ahora puede usar globalmente en cualquier controlador de vista que desee:
fuente
La respuesta ya se dio en publicaciones anteriores, pero tengo una forma diferente de hacer esto
Rápido 3x:
¡Espero que esto ayude a alguien!
fuente
La respuesta de Chris fue de gran ayuda para mí, así que usé su enfoque y lo convertí en una función que puedo reutilizar. Esto me permite asignar un color a una subcadena mientras le doy al resto de la cadena otro color.
fuente
Swift 4.1
por ejemplo, si desea cambiar la fuente en NavBar:
fuente
Puedes usar esta extensión, la pruebo
rápido 4.2
fuente
Swift 2.2
fuente
.CGColor
.La forma más fácil de hacer etiquetas con diferentes estilos como el color, la fuente, etc. es usar la propiedad "Atributos" en el Inspector de atributos. Simplemente elija parte del texto y cámbielo como desee
fuente
Basado en las respuestas antes de crear una extensión de cadena
Puede pasar los atributos del texto al método
Llamar así
fuente
Swift 4.1
He cambiado de esto en Swift 3
Y esto en Swift 4.0
a Swift 4.1
Funciona bien
fuente
rápido 4.2
fuente
Para todos los que buscan " Aplicar un color específico a varias palabras en el texto ", podemos hacerlo usando NSRegularExpression
Enlace de referencia: https://gist.github.com/aquajach/4d9398b95a748fd37e88
fuente
fuente
Con esta sencilla función puedes asignar el texto y resaltar la palabra elegida.
También puede cambiar UITextView a UILabel , etc.
fuente
Para cambiar el color de la fuente, primero seleccione atribuido en lugar de simple como en la imagen de abajo
Luego, debe seleccionar el texto en el campo atribuido y luego seleccionar el botón de color en el lado derecho de las alineaciones. Esto cambiará el color.
fuente
Puede utilizar este método. Implementé este método en mi clase de utilidad común para acceder globalmente.
fuente
Si está utilizando Swift 3x y UITextView, tal vez NSForegroundColorAttributeName no funcione (no me funcionó sin importar el enfoque que intenté).
Entonces, después de investigar un poco, encontré una solución.
fuente
Manera súper fácil de hacer esto.
Para obtener más detalles, haga clic aquí: https://github.com/iOSTechHub/AttributedString
fuente
Necesita cambiar los parámetros de la vista de texto, no los parámetros de la cadena atribuida
fuente
Por favor, consulte Cocoapod Prestyler :
fuente
}
fuente
Puedes usar como extensión simple
fuente