guidelines - menu ios
¿Cómo cambiar el color resaltado de un UIButton? (8)
En Swift :
import UIKit
class CustomUIButtonForUIToolbar: UIButton {
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func drawRect(rect: CGRect) {
// Drawing code
super.drawRect(rect)
self.layer.borderColor = UIColor.blueColor().CGColor
self.layer.borderWidth = 1.0
self.layer.cornerRadius = 5.0
self.clipsToBounds = true
self.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal)
self.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Highlighted)
}
override var highlighted: Bool {
didSet {
if (highlighted) {
self.backgroundColor = UIColor.blueColor()
}
else {
self.backgroundColor = UIColor.clearColor()
}
}
}
}
Esta pregunta ya tiene una respuesta aquí:
Creé un botón de navegación en mi UINavigationController. Lo configuro para resaltarlo cuando lo tocas:
[someButton setShowsTouchWhenHighlighted:YES];
¿Hay alguna forma de cambiar el color resaltado a otro que no sea el blanco predeterminado?
En Swift, si desea utilizar una imagen para resaltar el estado, puede hacer esto con UIButton
:
if enabled {
//highlighted state
enableMicrophone.setImage(UIImage(named: "mic_on"), forState: .Highlighted)
} else {
//normal state
enableMicrophone.setImage(UIImage(named: "mic_off"), forState: .Normal)
}
Estoy logrando cierto éxito al usar un viejo y viejo truco web.
images.xcassets
un par de elementos de imagen en images.xcassets
, archivos PNG, ambos de 1px por 1px. Uno es el color normal, el otro es el color de fondo.
Voy de negro puro a blanco puro, así que:
En el guión gráfico, selecciono el botón. En el ''Inspector de atributos'' (panel de la derecha, 4to ícono) cambio el tipo a ''personalizado'', cambie ''configuración de estado'' a ''resaltar'', luego ''fondo'' a ''pizarrón blanco'' (o lo que sea que usted lo llame ) y ''Color del texto'' a ''color negro''.
Ahora cambio ''state config'' a ''Default'', ''background'' a ''blackPixel'' (o lo que sea) y ''Text Color'' a ''white color''.
Supongo que puede usar estos píxeles cada vez que necesite aplicar un color cuando solo tenga acceso a las imágenes en el editor Storyboard.
Esto aumenta el número de activos de imagen, pero reduce enormemente el código requerido. Lo que me agrada.
Intente anular el UIButton con el siguiente Método ... y simplemente cambie el color de fondo del botón cuando esté en estado resaltado.
- (void)setHighlighted:(BOOL)highlighted {
[super setHighlighted:highlighted];
if (highlighted) {
self.backgroundColor = [UIColor Your Customcolor];
}
}
Pruébalo ... espero que ayude
Para Swift
import UIKit
extension UIImage {
func imageWithAlphaComponent(alpha: CGFloat) -> UIImage {
UIGraphicsBeginImageContextWithOptions(self.size, false, 0)
let ctx = UIGraphicsGetCurrentContext()
let area = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height)
CGContextScaleCTM(ctx, 1, -1)
CGContextTranslateCTM(ctx, 0, -area.size.height)
CGContextSetBlendMode(ctx, CGBlendMode.Multiply)
CGContextSetAlpha(ctx, alpha)
CGContextDrawImage(ctx, area, self.CGImage)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
}
Escribir
button.setImage(image.imageWithAlphaComponent(0.65), forState: .Highlighted)
https://gist.github.com/yukitoto/e8aa420e20be7ab5d64b71e96ecd61f1
Proporcionaré una respuesta Swift , que se puede usar sin ninguna personalización, si desea que el color resaltado sea una versión oscura del color de fondo original. Si, por otro lado, desea un color de fondo resaltado completamente diferente, puede suministrarlo a la propiedad highlightBackgroundColor como UIColor.
La siguiente es la forma más eficiente y directa de implementar dicha funcionalidad en Swift. También es genérico, lo que significa que puede usarse para muchos botones diferentes con diferentes colores.
Aquí está el código:
import UIKit
class HighlightedColorButton: UIButton {
// A new highlightedBackgroundColor, which shows on tap
var highlightedBackgroundColor: UIColor?
// A temporary background color property, which stores the original color while the button is highlighted
var temporaryBackgroundColor: UIColor?
// Darken a color
func darkenColor(color: UIColor) -> UIColor {
var red = CGFloat(), green = CGFloat(), blue = CGFloat(), alpha = CGFloat()
color.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
red = max(red - 0.5, 0.0)
green = max(green - 0.5, 0.0)
blue = max(blue - 0.5, 0.0)
return UIColor(red: red, green: green, blue: blue, alpha: alpha)
}
// Set up a property observer for the highlighted property, so the color can be changed
@objc override var highlighted: Bool {
didSet {
if highlighted {
if temporaryBackgroundColor == nil {
if backgroundColor != nil {
if let highlightedColor = highlightedBackgroundColor {
temporaryBackgroundColor = backgroundColor
backgroundColor = highlightedColor
} else {
temporaryBackgroundColor = backgroundColor
backgroundColor = darkenColor(temporaryBackgroundColor!)
}
}
}
} else {
if let temporaryColor = temporaryBackgroundColor {
backgroundColor = temporaryColor
temporaryBackgroundColor = nil
}
}
}
}
}
Trate el botón como un UIButton normal, con la adición de la propiedad opcional highlightBackgroundColor:
let highlightedColorButton = HighlightedColorButton.buttonWithType(.Custom) as HighlightedColorButton
highlightedColorButton.backgroundColor = UIColor.redColor()
highlightedColorButton.highlightedBackgroundColor = UIColor.blueColor()
Puede usar setBackgroundImage:forState:
para establecer la imagen de fondo del botón cuando está resaltado.
ex:
Como sugirió Tim en su respuesta aquí , puedes crear un UIImage
de UIColor
:
- (UIImage *)imageWithColor:(UIColor *)color {
CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
A continuación, configure la imagen como imagen de fondo del botón cuando esté resaltada
[button setBackgroundImage:[self imageWithColor:[UIColor blueColor]] forState:UIControlStateHighlighted];
Use esta declaración para establecer el color resaltado del UIButton:
[button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];