titlelabel guidelines color buttons ios iphone objective-c uibutton

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];