Bu sorunun birçok yanıtı var, ancak düğmelerinizi stilize etmek için backgroundColor'u gerçekten kullanmak istiyorsanız, hepsi çok kullanışlı görünmüyor. UIButton, farklı kontrol durumları için farklı görüntüler ayarlamak için güzel bir seçeneğe sahiptir, ancak arka plan renkleri için aynı özellik yoktur. Bu nedenle çözümlerden biri, renkli görüntüler oluşturacak ve düğmeye uygulanacak bir uzantı eklemektir.
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)
}
}
Bu çözümle ilgili yalnızca bir sorun - bu değişiklik film şeridinde oluşturulan düğmelere uygulanmayacak. Bana gelince bu bir sorun değil çünkü kod UI stil tercih ederim. Görsel senaryo taslaklarını kullanmak istiyorsanız,@IBInspectable
ihtiyaç duyduğunuz .
İkinci seçenek alt sınıflandırmadır, ancak bundan kaçınmayı tercih ederim.