¿Alguien puede sugerir cómo subrayar el título de un UIButton? Tengo un UIButton de tipo Personalizado y quiero que el Título esté subrayado, pero el Creador de interfaces no proporciona ninguna opción para hacerlo.
En Interface Builder, cuando selecciona la opción de fuente para un botón, proporciona la opción de seleccionar Ninguno, Individual, Doble, Color, pero ninguno de estos proporciona ningún cambio en el Título del botón.
Cualquier ayuda apreciada.
text
formatting
uibutton
RVN
fuente
fuente
Respuestas:
UIUnderlinedButton.h
UIUnderlinedButton.m
fuente
drawRect
no ser llamado en la rotación. Esto se puede resolver configurando el botón para volver a dibujar de esta manera: lomyButton.contentMode = UIViewContentModeRedraw;
que obliga al botón a volver a dibujar cuando cambian los límites.setTitle
método de esta manera:objective-c - (void)setTitle:(NSString *)title forState:(UIControlState)state { [super setTitle:title forState:state]; [self setNeedsDisplay]; }
Para usar el generador de interfaces para subrayar, uno tiene que:
Video que alguien más hizo https://www.youtube.com/watch?v=5-ZnV3jQd9I
fuente
setTitle
con texto atribuido. Para mí, crear un botón personalizado para dibujar subrayado es un poco exótico (es posible que todavía sea nuevo en iOS, incluso cuando haya completado una aplicación).Desde iOS6 ahora es posible usar una cadena NSAttributedString para realizar subrayado (y cualquier otra cosa que le atribuya soporte de cadenas) de una manera mucho más flexible:
Nota: agregué esto como otra respuesta, ya que es una solución totalmente diferente a la anterior.
Editar: curiosamente (al menos en iOS8) tienes que subrayar el primer carácter, de lo contrario no funciona.
así que, como solución alternativa, configure el primer carácter subrayado con un color claro.
fuente
Puede hacerlo en el propio generador de interfaces.
fuente
Es muy simple con cadena atribuida
Crea un diccionario con atributos establecidos y se aplica a la cadena atribuida. Luego puede configurar la cadena atribuida como título atribuido en uibutton o atributo atribuido en uilabel.
fuente
commentString
; ¿Copiaste la respuesta de @ NickH247?Aquí está mi función, funciona en Swift 1.2.
ACTUALIZACIÓN Swift 3.0 extensión:
fuente
La respuesta de Nick es una excelente forma rápida de hacer esto.
Agregué soporte
drawRect
para sombras.La respuesta de Nick no tiene en cuenta si el título de su botón tiene una sombra debajo del texto:
Pero puede mover el subrayado hacia abajo por la altura de la sombra de la siguiente manera:
Entonces obtendrás algo como esto:
fuente
Para Swift 3 se puede usar la siguiente extensión:
fuente
fuente
Ampliando la respuesta de @Nick H247, experimenté un problema en el que, en primer lugar, el subrayado no se volvía a dibujar cuando el botón cambiaba de tamaño en la rotación; Esto se puede resolver configurando el botón para volver a dibujar de la siguiente manera:
Esto obliga a que el botón se vuelva a dibujar cuando cambian los límites.
En segundo lugar, el código original suponía que solo tenía 1 línea de texto en el botón (mi botón se ajusta a 2 líneas en la rotación) y el subrayado solo aparece en la última línea de texto. El código drawRect se puede modificar para calcular primero el número de líneas en el botón, luego poner un subrayado en cada línea en lugar de solo en la parte inferior, de esta manera:
¡Espero que este código ayude a alguien más!
fuente
En rápido
fuente
Puede usar este código para agregar subrayado con espacio en el botón.
1 - Referencia del creador de interfaces
2 - usando el código descrito
fuente
La versión 5.0 de Swift que funciona a partir de septiembre de 2019 en Xcode 10.3:
Para usarlo, configure primero el título de su botón
button.setTitle("Button Title", for: .normal)
y luego llamebutton.underlineText()
para resaltar ese título.fuente
¿Cómo se manejará el caso cuando mantengamos presionado un botón subrayado? En ese caso, el color del texto del botón cambia según el color resaltado pero la línea permanece del color original. Digamos que si el color del texto del botón en estado normal es negro, entonces su subrayado también tendrá color negro. El color resaltado del botón es blanco. Mantener el botón presionado cambia el color del texto del botón de negro a blanco, pero el color de subrayado sigue siendo negro.
fuente
Creo que es un error en el editor de fuentes en XCode. Si utiliza el generador de interfaces, debe cambiar el título de Normal a Atribuido, abrir TextEdit, crear texto subrayado y copiar y pegar en el cuadro de texto en XCode
fuente
Respuesta de Nick H247 pero enfoque rápido:
fuente
fuente
Versión Swift 3 para la respuesta de @ NickH247 con color de subrayado personalizado, ancho de línea y espacio:
fuente