#ios #swift #uibutton #custom-button
#iOS #swift #uibutton #пользовательская кнопка
Вопрос:
У меня есть следующая пользовательская кнопка:
class GreenButton: UIButton {
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
private func setup() {
backgroundColor = .green
layer.cornerRadius = 4
setTitleColor(.white, for: .normal)
titleLabel?.font = .systemFont(ofSize: 22, weight: .bold)
}
}
Но я хочу, чтобы ее заголовок размывался при касании, точно так же, как ведет себя system UIButton. Если я объявлю свою кнопку таким образом GreenButton(type: .system)
, ее заголовок размывается, но шрифт не меняется. Если я объявлю его как GreenButton()
, его шрифт будет в порядке, но заголовок не будет размытым. Как устранить проблему?
Ответ №1:
Установите другой цвет для выделенного состояния:
private func setup() {
backgroundColor = .green
layer.cornerRadius = 4
// set title normal color
setTitleColor(.white, for: .normal)
// set title highlighted color
setTitleColor(.gray, for: .highlighted)
titleLabel?.font = .systemFont(ofSize: 22, weight: .bold)
}
Ответ №2:
Вы также можете добиться этого, как показано ниже:
class GreenButton: UIButton {
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
setTitleColor(UIColor(white:1.0 , alpha: 0.5), for: .normal)
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
setTitleColor(.white, for: .normal)
}
private func setup() {
backgroundColor = .green
layer.cornerRadius = 4
setTitleColor(.white, for: .normal)
titleLabel?.font = .systemFont(ofSize: 22, weight: .bold)
}
}