ios - buttons - ¿Cambiar el color del resalte gris oscuro cuando se mantiene presionada la tecla UIButton personalizada?
menu ios (5)
Tengo un UIButton
personalizado que es una nube, un archivo .png transparente en blanco y negro, sin estado inactivo, solo una imagen. Al tocar y mantener el dedo sobre él, se vuelve gris oscuro. Estoy tratando de cambiar ese gris oscuro a algo un poco menos opresivo. El botón está abierto en una vista, no en una barra de pestañas, barra de herramientas o controlador de navegación.
Ya he intentado configurar tintColor
(que la documentación me informa que solo es adecuada para ''algunos'' tipos de botones, que no indica cuál).
También he intentado cambiar todo lo que puedo encontrar en Interface Builder relacionado con los colores destacados, los estados predeterminados, etc. Nada ha marcado la diferencia.
Incluso he intentado configurar la propia imagen del botón para su estado UIControlStateHighlighted
, pero incluso esto hace que aparezca la superposición de color gris oscuro cuando sostengo el dedo sobre él.
¿Cómo puedo cambiar ese color? He analizado muchos otros problemas aquí en SO y no he podido encontrar una solución que funcione para mí. Cualquier ayuda sería muy apreciada!
EDITAR: Resolví el problema usando una categoría de UIImage
que agrega un método que usa CoreGraphics
para aplicar un tinte a un UIImage
proporcionado. Entonces puse a esa imagen como el punto culminante, y todo está bien. Parece una gran cantidad de cosas para cambiar el color que Apple debería dejarnos cambiar, pero c''est la vie.
Estaba teniendo un problema similar con un UIButton personalizado cuando el botón se resaltaba en gris cada vez que se presionaba. Resolví ese problema subclasificando UIButton y en la implementación anulé un solo método, (void) setHighlighted: method y lo mantuve vacío:
- (void)setHighlighted:(BOOL)highlighted
{
// Leave empty to prevent super from doing whatever
// that it is doing to show the grey highlight.
}
Eso detuvo cualquier tipo de resaltado ya que no estaba haciendo nada en el método. Es un enfoque mejor si todo lo que intenta hacer es eliminar cualquier efecto de resaltado.
Entonces, en su código, cree una subclase de UIButton, anule el método setHighlighted y luego haga de su botón personalizado una subclase de esta clase personalizada.
Puedes escribir un botón personalizado que lo haga.
class ActionButton: UIButton {
var originalBackgroundColor: UIColor!
override var backgroundColor: UIColor? {
didSet {
if originalBackgroundColor == nil {
originalBackgroundColor = backgroundColor
}
}
}
override var isHighlighted: Bool {
didSet {
guard let originalBackgroundColor = originalBackgroundColor else {
return
}
backgroundColor = isHighlighted ? originalBackgroundColor.darken() : originalBackgroundColor
}
}
Si ajustaImageWhenHighlighted = NO no funciona, configure Button-Type en Custom (IB o programmatically).
Tipo de botón predeterminado: Sistema, cambia el comportamiento del botón resaltado.
Swift 3:
myButton.adjustsImageWhenHighlighted = false
Usted dijo que configuró una imagen personalizada para el estado UIControlStateHighlighted
. Esto debería deshabilitar el comportamiento predeterminado.
Si aún tiene problemas, puede deshabilitar este efecto configurando la propiedad adjustsImageWhenHighlighted
en NO
y use el efecto personalizado que desee.