La subclase de UIButton está cambiando la fuente al hacer clic.
Estoy viendo un comportamiento extraño en un arreglo de botones que he creado en storyboard. Tengo 4 botones, cada uno de tipo personalizado TakesContainerButton
, y cuando se hace clic en un botón, cambia a la fuente del sistema, pero cuando se hace clic en otro botón diferente, el botón anterior vuelve a la fuente deseada. No estoy seguro de qué está pasando aquí.
Los botones también están incrustados en un stack view, si eso importa.
Aquí está la implementación cuando se presiona uno de los botones, donde buttons
es un arreglo de los 4 botones:
@IBAction func filterPressed(_ sender: TakesContainerButton) {
for button in buttons {
button.unclick()
}
sender.click()
}
Aquí está la clase personalizada:
class TakesContainerButton: UIButton {
var bottom = UIView()
func click(){
self.setTitleColor(.darkGray, for: .normal)
let xOffset:CGFloat = 10
bottom = UIView(frame: CGRect(x: xOffset / 2, y: self.frame.height - 3, width: self.frame.width - xOffset, height: 3))
bottom.layer.cornerRadius = 1.5
bottom.backgroundColor = .darkGray
self.addSubview(bottom)
}
func unclick(){
bottom.removeFromSuperview()
self.setTitleColor(UIColor(hex: "8B8B8B"), for: .normal)
}
override func awakeFromNib(){
setFont()
}
func setFont(){
self.titleLabel?.font = UIFont(name: "Lato-Bold", size: 12)
}
}
davy.ai
Parece que el problema está en la implementación de la función
click()
en la claseTakesContainerButton
. Cuando se hace clic en un botón, se establece el color del título en gris oscuro y se agrega una vista UIView en la parte inferior del botón con un color de fondo gris oscuro. Sin embargo, cuando se hace clic en otro botón, el botón anterior se desmarca eliminando la vista inferior pero el color del título no se restablece al color deseado que esUIColor(hex: "8B8B8B")
.Para solucionar este problema, modifique la función
unclick()
para que también restablezca el color del título al color deseado de esta manera:Esto debería asegurar que cuando se desmarca un botón, su color de título se cambia de nuevo al color deseado.