Esta pregunta tiene muchas respuestas, pero todas no parecen muy útiles en caso de que realmente quiera usar backgroundColor para diseñar sus botones. UIButton tiene una buena opción para configurar diferentes imágenes para diferentes estados de control, pero no hay la misma función para los colores de fondo. Entonces, una de las soluciones es agregar una extensión que generará imágenes a partir del color y aplicarlas al botón.
extension UIButton {
private func image(withColor color: UIColor) -> UIImage? {
let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0)
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext()
context?.setFillColor(color.cgColor)
context?.fill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
func setBackgroundColor(_ color: UIColor, for state: UIControlState) {
self.setBackgroundImage(image(withColor: color), for: state)
}
}
Solo hay un problema con esta solución: este cambio no se aplicará a los botones creados en el guión gráfico. En cuanto a mí, no es un problema porque prefiero diseñar la interfaz de usuario desde el código. Si desea usar guiones gráficos, entonces @IBInspectable
necesita algo de magia adicional .
La segunda opción es la subclasificación, pero prefiero evitar esto.