¿Cómo sería posible incluir texto en negrita y en negrita en un uiLabel?
Prefiero no usar un UIWebView ... También he leído que esto es posible usando NSAttributedString pero no tengo idea de cómo usarlo. ¿Algunas ideas?
Apple logra esto en varias de sus aplicaciones; Captura de pantalla de ejemplos:
¡Gracias! - Dom
ios
objective-c
swift
uilabel
nsattributedstring
DomMaiocchi
fuente
fuente
Respuestas:
Actualizar
En Swift no tenemos que lidiar con cosas viejas de iOS5, además la sintaxis es más corta, por lo que todo se vuelve realmente simple:
Swift 5
Swift 3
Uso:
Bonificación: internacionalización
Algunas personas comentaron sobre la internacionalización. Personalmente, creo que esto está fuera del alcance de esta pregunta, pero con fines educativos, así es como lo haría.
Resultado (suponiendo que las cadenas localizables en inglés y japonés estén disponibles)
Respuesta anterior para iOS6 y posterior (Objective-C todavía funciona):
En iOS 6
UILabel
,UIButton
,UITextView
,UITextField
, apoyo atribuye cadenas que significa que no necesitamos para crearCATextLayer
s como nuestro receptor para cuerdas atribuidos. Además, para hacer la cadena atribuida, ya no necesitamos jugar con CoreText :) Tenemos nuevas clases en obj-c Foundation.framework likeNSParagraphStyle
y otras constantes que nos harán la vida más fácil. ¡Hurra!Entonces, si tenemos esta cadena:
Solo necesitamos crear la cadena atribuida:
Hay un par de buenas entradas de blog introductorias aquí desde chicos de invasivecode que explican con más ejemplos de usos
NSAttributedString
, busca "Introducción a NSAttributedString para iOS 6" y "cadenas atribuidos para iOS utilizando Interface Builder" :)PD: el código anterior debería funcionar, pero fue compilado por el cerebro. Espero que sea suficiente :)
Respuesta anterior para iOS5 y abajo
¡Use un CATextLayer con una NSAttributedString! mucho más ligero y simple que 2 UILabels. (iOS 3.2 y superior)
Ejemplo.
No olvide agregar el marco QuartzCore (necesario para CALayers) y CoreText (necesario para la cadena atribuida).
El siguiente ejemplo agregará una subcapa a la barra de herramientas del controlador de navegación. à la Mail.app en el iPhone. :)
En este ejemplo, solo tengo dos tipos diferentes de fuente (negrita y normal) pero también podría tener un tamaño de fuente diferente, diferente color, cursiva, subrayado, etc. Eche un vistazo a las teclas de cadena de atributos NSAttributedString / NSMutableAttributedString y CoreText .
Espero eso ayude
fuente
[NSDictionary dictionaryWithObjectsAndKeys: boldFont, NSFontAttributeName, foregroundColor, NSForegroundColorAttributeName, nil]
convierte@{ NSFontAttributeName: boldFont, NSForegroundColorAttributeName: foregroundColor }
.{
), no corchetes ([
).Prueba una categoría en UILabel:
Así es como se usa:
Y aquí está la categoría.
UILabel + Boldify.h
UILabel + Boldify.m
Tenga en cuenta que esto solo funcionará en iOS 6 y versiones posteriores. Simplemente se ignorará en iOS 5 y versiones anteriores.
fuente
@{NSFontAttributeName:[UIFont boldSystemFontOfSize:self.font.pointSize]}
voté a favor[UIFont boldSystemFontOfSize:self.font.pointSize]
TO[UIFont fontWithName:self.font.fontName size:self.font.pointSize]
Eso es fácil de hacer en Interface Builder :
1) hacer que UILabel sea Atribuido en el Inspector de Atributos
2) seleccione parte de la frase que desea poner en negrita
3) cambie su fuente (o tipo de letra negrita de la misma fuente) en el selector de fuente
¡Eso es todo!
fuente
Hay una categoría basada en la categoría de bbrame. Funciona de manera similar, pero le permite en negrita lo mismo
UILabel
varias veces con resultados acumulativos.UILabel + Boldify.h
UILabel + Boldify.m
Con estas correcciones, puede usarlo varias veces, por ejemplo:
resultará con: " Actualizado: 14/10/2012 21:59 PM ".
fuente
A mí me funcionó:
Para la versión Swift: ver aquí
fuente
Adopté la respuesta de Crazy Yoghurt a las extensiones de swift.
Es posible que no haya una buena conversión entre Range y NSRange, pero no encontré algo mejor.
fuente
boldSubstring(_:)
quevar range = text.string.range(of: substr, options: .caseInsensitive)
a las cadenas de maquillaje con diferentes capitalización también en negrita.Echa un vistazo a TTTAttributedLabel . Es un reemplazo directo para UILabel que le permite mezclar fuentes y colores en una sola etiqueta configurando una NSAttributedString como texto para esa etiqueta.
fuente
En este caso podrías intentarlo,
fuente
Para poner el texto en negrita y subrayado en un UILabel. Simplemente agregue las siguientes líneas en su código.
fuente
Usa el siguiente código. Espero que te sirva de ayuda.
fuente
Swift 4:
fuente
Espero que este satisfaga tu necesidad. Proporcione la cadena para procesar como entrada y proporcione las palabras que deben estar en negrita / color como entrada.
Gracias. Feliz codificación.
fuente
No necesito NSRange con el siguiente código que acabo de implementar en mi proyecto (en Swift):
fuente
Si desea facilitar el uso de cadenas atribuidas, intente usar Attributed String Creator, que generará el código por usted. https://itunes.apple.com/us/app/attributed-string-creator/id730928349
fuente