Как изменить пользовательское изображение UIButton на лету - PullRequest
0 голосов
/ 11 декабря 2018

Я создал собственный класс UIButton, чтобы он выглядел как выпадающий выбор.У меня есть маленькое изображение стрелки внизу справа от кнопки.Я хочу изменить изображение кнопки на различные изображения, такие как серый, белый или красный, в зависимости от различных условий.Как это сделать?Вот мой код:

class DropDownButton: UIButton {

   let dropDownImageGrey = UIImage(named: "Icons/DropDown/Grey")
   let dropDownImageWhite = UIImage(named: "Icons/DropDown/White")
   let dropDownImageRed = UIImage(named: "Icons/DropDown/Red")

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

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

    override func awakeFromNib() {
        super.awakeFromNib()

        self.imageEdgeInsets = UIEdgeInsets(top: 0, left: self.frame.width - 108, bottom: 0, right:0)
        self.setImage(dropDownImageGrey, for: [])
        self.titleEdgeInsets = UIEdgeInsets(top: 0, left: -13, bottom: 0, right:0)
    }
}

override func viewDidLoad() {
    // Change image to red one
    dropDownButton.??? // How to change?
}

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

Вы можете использовать enum для определения различных условий и добавить метод для получения изображений.В зависимости от условия вы можете установить изображение.Пример, приведенный ниже:

Определите это перечисление за пределами вашего класса

enum DropdownCondition
{
    case condition1

    case condition2

    case condition3

    func getImage() -> UIImage? {
        switch self {
        case .condition1:
            return UIImage(named: "Icons/DropDown/Grey")
        case .condition1:
            return UIImage(named: "Icons/DropDown/White")
        case .condition1:
            return UIImage(named: "Icons/DropDown/Red")
        default:
            return nil
        }
    }
}

в вашем viewDidLoad / init или вызовите любой метод yourMethodWithSomeoCndition (.condition1) на основе условия.

override func viewDidLoad() {
    // Change image to red one
    let dropDownButton = DropDownButton()

    //Call based on your condition
    yourMethodWithSomeoCndition(.condition1)//This condition can change on the fly
}



func yourMethodWithSomeoCndition(_ condition:DropdownCondition)
{
    self.dropDownButton.setImage(condition.getImage(), for: .normal)
}
0 голосов
/ 12 декабря 2018

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

class DropDownButton: UIButton {

    enum ImageType: String {
      case grey = "Icons/DropDown/Grey"
      case white = "Icons/DropDown/White"
      case red = "Icons/DropDown/Red"

      var image: UIImage? { return UIImage(named: rawValue) }
    }

    var imageType: ImageType = .red {
      didSet {
        setImage(imageType.image, for: .normal)
      }
    }

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

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

    override func awakeFromNib() {
        super.awakeFromNib()

        self.imageEdgeInsets = UIEdgeInsets(top: 0, left: self.frame.width - 108, bottom: 0, right:0)
        self.titleEdgeInsets = UIEdgeInsets(top: 0, left: -13, bottom: 0, right:0)
    }
}

override func viewDidLoad() {
    // Change image to red one
    dropDownButton.imageType = .red
}

Позже, если вам нужно изменить тип изображения, просто установите imageType кнопки.Как

dropDownButton.imageType = .grey
dropDownButton.imageType = .white
0 голосов
/ 11 декабря 2018

Возможно, вы захотите использовать setImage свойство UIButton,

override func viewDidLoad() {
    // Change image to red one
    let dropDownButton = DropDownButton()
    dropDownButton.setImage(dropDownButton.dropDownImageRed, for: .normal)
}

Если изображения добавляются в Assets.xcassets, вы можете использовать image literals или напрямую использовать такие имена, как

let dropDownImageGrey = UIImage(named: "Grey")
let dropDownImageWhite = UIImage(named: "White")
let dropDownImageRed = UIImage(named: "Red")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...