Как размыть заголовок пользовательской кнопки, такой как заголовок системы UIButton, при касании в iOS?
У меня есть следующая настраиваемая кнопка:
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)
}
}
Но я хочу, чтобы его заголовок размывался при прикосновении, точно так же, как ведет себя системный UIButton. Если я объявлю свою кнопку вот такGreenButton(type: .system)
, его название размывается, но шрифт не меняется. Если я объявлю это какGreenButton()
, его шрифт в порядке, но заголовок не размывается. Как исправить проблему?
2 ответа
Решение
Установите другой цвет для выделенного состояния:
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)
}
Вы также можете добиться этого, как показано ниже:
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)
}
}