cocoa-touch - settitle - set title swift
Cómo agregar un segundo UILabel a un UIButton, configurable por UIControlState (2)
El segundo de tu enfoque funciona bien. Simplemente agregue 2 objetivos: Primera actualización al objetivo de "estado normal" usando "todos los eventos táctiles". Segunda actualización para "resaltado" usando el evento "tocar hacia abajo".
Si los estados no solo se modifican mediante toques y se desea manejar esto de manera más general, Id sugiero el multihilo. Todo lo que realmente necesita es llamar a performSelectorInBackground al inicializar todos estos elementos (el selector actualiza la etiqueta según el estado del botón) y luego llamar al mismo performSelectorInBackground al final del método "update label", creando un ciclo infinito.
Quiero mostrar 2 cadenas (en diferentes posiciones en el botón) con diferentes fuentes y colores (estoy usando el setTitle
del botón para uno, y necesito otro), y algunos atributos se deben cambiar en función del UIControlState
actual (como el color).
Por lo tanto, estoy buscando la mejor manera de agregar una segunda etiqueta a un UIButton
. Necesito que la etiqueta sea configurable por UIControlState
(quiero un color diferente para UIControlStateNormal
y UIControleStateHighlighted
por ejemplo).
He intentado los siguientes enfoques:
- Subclass a
UIButton
y usedrawRect
: aunque no se recomienda (y ahora entiendo por qué), no creo que sea posible, parece que se llama al métododrawRect
del botón (y después de la de mi subclase) incluso si no lo hago t llamar super. - Cree un nuevo
UILabel
y agréguelo como unasubview
a mi botón: esto funciona bastante bien, excepto que no sé cómo cambiar el color cuando elUIControlState
del botón está cambiando - Crea una nueva capa y usa
drawLayer
: no sé cómo llamar al métododrawLayer
cada vez que cambia el estado del botón (midrawLayer
solo se llama una vez, cuando usosetNeedsDisplay
justo después de agregar mi capa al botón)
¿Hay alguna otra manera de lograr lo que estoy tratando de hacer, o tal vez una de esas soluciones podría funcionar (con algunos ajustes)?
¡Gracias!
Ok, creo que encontré una solución de trabajo (para mi problema al menos).
Estoy subclasificando la clase UIButton
(funciona para mí, ya que estoy usando un botón dibujado personalizado de todos modos), y titleRectForContentRect
método titleRectForContentRect
que se llama cada vez que se debe mostrar el título (incluso después de un cambio de estado, justo antes monitor).
UILabel
un UILabel
a la vista del botón para mostrar la segunda cadena que quiero, y durante el titleRectForContentRect
, titleRectForContentRect
la ubicación de frame
correcta para mi etiqueta, actualizo la fuente y el color del texto de la etiqueta en función del estado del botón ( self.state
). y eso es todo lo que necesito