Пользовательская кнопка не отображается серым цветом при отключении - PullRequest
0 голосов
/ 13 мая 2019

Я создал пользовательскую кнопку и установил ее, когда она не включена, отображается серым цветом. Однако, когда я запускаю программу, отключенные кнопки не отображаются серым цветом. Что я могу делать не так.

Класс пользовательских кнопок:

import UIKit

class CustomButton: UIButton {

    override init (frame: CGRect){
        super.init(frame: frame)
        config()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        config()
    }

    func config(){

        // Setting disabled/enabled traits
        setTitleColor(UIColor.gray, for: UIControl.State.disabled)
        setTitleColor(UIColor.gray, for: UIControl.State.normal)


        if !isEnabled{
            backgroundColor = UIColor.gray
        }else{
            backgroundColor = UIColor.white
        }

        // Other styling options
        layer.cornerRadius = 10

        // Making it look 3D
        layer.shadowColor = UIColor(red: 0.0, green: 0, blue: 0, alpha: 1.0).cgColor
        layer.shadowOpacity = 1.0
        layer.shadowRadius = 1.0
        layer.shadowOffset = CGSize(width: 0, height: 1)
    }

}

Кнопка инициализации (также установлена ​​в раскадровке)

    @IBOutlet weak var movePickPosBut: CustomButton!

1 Ответ

0 голосов
/ 14 мая 2019

Ваш цвет фона в соответствии с состоянием 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)
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...