На этот вопрос есть много ответов, но все они выглядят не очень полезными, если вы действительно хотите использовать backgroundColor для стилизации ваших кнопок. UIButton имеет хорошую опцию для установки разных изображений для разных состояний управления, но нет другой функции для цветов фона. Поэтому одним из решений является добавление расширения, которое будет генерировать изображения из цвета и применять их к кнопке.
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)
}
}
Только одна проблема с этим решением - это изменение не будет применено к кнопкам, созданным в раскадровке. Что касается меня, это не проблема, потому что я предпочитаю стилизовать пользовательский интерфейс из кода. Если вы хотите использовать раскадровки, то добавьте немного магии@IBInspectable
.
Второй вариант - это создание подклассов, но я предпочитаю избегать этого.