Swift Настройка подкласса UIButton ButtonType - PullRequest
1 голос
/ 12 января 2020

У меня есть простой подкласс UIButton

class IconButton: UIButton {

    init(type: FontAwesomeStyle, icon: FontAwesome, color: UIColor = .black, size: CGFloat = 20) {
        super.init(frame: CGRect.zero)

        let iconAsText = String.fontAwesomeIcon(name: icon)
        let iconText = NSMutableAttributedString(string: iconAsText, attributes: [
            NSAttributedString.Key.font: UIFont.fontAwesome(ofSize: size, style: type)
        ])

        setAttributedTitle(iconText, for: .normal)
        setTitleColor(color, for: .normal)

    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

Проблема, с которой я столкнулся, заключается в том, что я хотел бы, чтобы кнопка имела поведение, аналогичное системным кнопкам. В частности, когда вы нажимаете и удерживаете кнопку, она меняет цвет.

let button = UIButton(type: .system)

Поскольку buttonType является свойством UIButton только для получения, а UIButton.init(type: UIButton.ButtonType) является вспомогательным инициализатором, я не уверен, как это реализовать подкласс.

1 Ответ

1 голос
/ 12 января 2020

Все еще не уверен, возможно ли повторить тип кнопки .system в подклассе, но решение для получения нужного мне поведения было следующим:

class IconButton: UIButton {

    override var isHighlighted: Bool {
        willSet(newVal) {
           if newVal != isHighlighted {
               // newVal is true when the button is being held down

           }
        }
    }

    // Rest of class...
}
...