Ваш цвет фона в соответствии с состоянием isEnabled
является статическим, а не динамическим;то есть во время создания кнопки вы проверяете, включена ли она (что, вероятно, будет), и соответственно устанавливаете цвет фона.Но это не изменяется при изменении флага isEnabled
.
Вместо этого используйте системные функции для управления фоном в соответствии с состоянием.Поэтому замените этот код: -
if !isEnabled{
backgroundColor = UIColor.gray
}else{
backgroundColor = UIColor.white
}
этим: -
self.setBackgroundColor(UIColor.gray, for: .disabled)
Это позволит сохранить цвет фона, связанный с состоянием.
Вам также понадобитсяэтот код, который я взял из этой статьи (и может предоставить дополнительную помощь).
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)
}
}