es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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)
        }
    }
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en la implementación de la función click() en la clase TakesContainerButton. 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 es UIColor(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:

    func unclick(){
        bottom.removeFromSuperview()
        self.setTitleColor(UIColor(hex: "8B8B8B"), for: .normal)
    }
    

    Esto debería asegurar que cuando se desmarca un botón, su color de título se cambia de nuevo al color deseado.

Comments are closed.