Múltiples colores en NSString
o NSMutableStrings
no son posibles. Así que he escuchado un poco sobre el NSAttributedString
que se introdujo con el iPad SDK 3.2 (o alrededor de 3.2) y está disponible en el iPhone a partir del iPhone SDK 4.0 beta .
Me gustaría tener una cuerda que tenga tres colores.
La razón por la que no uso 3 NSStrings separadas es porque la longitud de cada una de las tres NSAttributedString
subcadenas cambia a menudo, por lo que preferiría no usar ningún cálculo para reubicar 3 NSString
objetos separados .
Si es posible usar NSAttributedString
cómo hago lo siguiente - (si no es posible con una cadena NSAttributed, ¿cómo lo haría?):
Editar:
Recuerde @"first"
, @"second"
y @"third"
será reemplazado por otras cadenas en cualquier momento. Por lo tanto, el uso de valores de NSRange codificados no funcionará.
fuente
Respuestas:
Cuando construyo cadenas atribuidas, prefiero usar la subclase mutable, solo para mantener las cosas más limpias.
Dicho esto, así es como se crea una cadena atribuida tricolor:
escrito en un navegador. implementador de advertencia
Obviamente, no va a codificar en rangos como este. Quizás en su lugar podría hacer algo como:
fuente
NSAttributedString
. Sin embargo, hay cosas de código abierto, como OHAttributedLabel .kCTForegroundColorAttributeName
lugar deNSForegroundColorAttributeName
.La pregunta ya está respondida ... pero quería mostrar cómo agregar sombras y cambiar la fuente con NSAttributedString también, para que cuando las personas busquen este tema no tengan que seguir buscando.
Aquí hay una versión Swift ...
¡Advertencia! Esto funciona para 4s.
Durante 5 segundos, debe cambiar todos los valores de flotación a valores dobles (porque el compilador aún no funciona correctamente)
Enum. Rápida para elegir la fuente:
Matriz Swift para acceso enum (necesaria porque enum no puede usar '-'):
Función de texto atribuida rápida:
primera y última extensión utilizada para encontrar rangos en una matriz de cadenas:
nuevos colores:
mi macro reemplazo:
mi creador de botones con texto atribuido:
mi creador de UIView / UILabel con texto atribuido, sombra y esquinas redondeadas:
sombra genérica agregar:
Ver extensión para ver estilo:
la vista real sí cargó la función:
fuente
Creo que es una forma muy conveniente de usar
regular expressions
para encontrar un rango para aplicar atributos. Así es como lo hice:Estaba buscando una lista de atributos disponibles y no los encontré aquí y en la primera página de una referencia de clase. Así que decidí publicar aquí información sobre eso.
Atributos estándar
Las cadenas atribuidas admiten los siguientes atributos estándar para texto. Si la clave no está en el diccionario, utilice los valores predeterminados que se describen a continuación.
Guía de programación NSAttributedString
Una referencia de clase completa está aquí .
fuente
Esta solución funcionará para cualquier longitud.
fuente
Escribí ayuda para agregar atributos fácilmente:
https://github.com/shmidt/MASAttributes
Puede instalar a través de CocoaPods también:
pod 'MASAttributes', '~> 1.0.0'
fuente
Desde iOS 7 puede usar
NSAttributedString
con sintaxis HTML:Debe agregar el archivo "string.html" a su proyecto, y el contenido del html puede ser así:
Ahora, puede usar
NSAttributedString
lo que quiera, incluso sin un archivo HTML, como por ejemplo:Fuente
fuente
Siempre encontré que trabajar con cadenas atribuidas es un proceso increíblemente largo y tedioso.
Entonces hice una aplicación para Mac que crea todo el código para ti.
https://itunes.apple.com/us/app/attributed-string-creator/id730928349?mt=12
fuente
Una solución más fácil con extensión de cadena atribuida.
Pruebe esto y vea (Probado en Swift 3 y 4)
Aquí se espera el resultado:
fuente
En Swift 4:
fuente
Puede cargar una
HTML
cadena atribuida de laSwift
siguiente maneraPara cargar un
html
archivo dehttp://sketchytech.blogspot.in/2013/11/creating-nsattributedstring-from-html.html
Y configure la cadena según su atributo requerido ... siga esto ..
http://makeapppie.com/2014/10/20/swift-swift-using-attributed-strings-in-swift/
fuente
Hice una biblioteca que hace esto mucho más fácil. Revisa ZenCopy.
Puede crear objetos de estilo y / o establecerlos en teclas para hacer referencia más adelante. Me gusta esto:
Luego, puede construir fácilmente cadenas Y diseñarlas Y tener parámetros :)
¡También puedes diseñar cosas fácilmente con búsquedas de expresiones regulares!
Esto dará estilo a todas las palabras con '@' delante del estilo 'token'. (por ejemplo, @jpmcglone)
Todavía tengo que hacerlo funcionar con todo lo que
NSAttributedString
tiene para ofrecer, pero creo quefontName
,fontSize
y el color cubre la mayor parte. Espere muchas actualizaciones pronto :)Puedo ayudarlo a comenzar con esto si lo necesita. También busco retroalimentación, así que si te hace la vida más fácil, diría que la misión está cumplida
fuente
fuente
Para resolver este tipo de problemas, creé la biblioteca en Swift, que se llama Atributika.
Lo puedes encontrar aquí https://github.com/psharanda/Atributika
fuente
Swift 4
Lista de atributos, vea aquí NSAttributedStringKey en Apple Docs
fuente
Una forma súper fácil de hacer esto.
Para más detalles haga clic aquí; https://github.com/iOSTechHub/AttributedString
fuente