На этот вопрос есть много ответов, но все они выглядят не очень полезными, если вы действительно хотите использовать 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
.
Второй вариант - создание подклассов, но я предпочитаю избегать этого.