Saltar al contenido

Cambiar el color de fondo del botón al pulsar en SwiftUI

Posteriormente a consultar con especialistas en el tema, programadores de diversas ramas y profesores dimos con la solución al dilema y la dejamos plasmada en este post.

Solución:

Para hacer esto, debe dar el color según el estado cambiado:

struct CustomButton: View 

@State private var didTap:Bool = false

  var body: some View 
    Button(action: 
        self.didTap = true
    ) 

    Text("My custom button")
        .font(.system(size: 24))
    
    .frame(width: 300, height: 75, alignment: .center)
    .padding(.all, 20)
    .background(didTap ? Color.blue : Color.yellow)
  

PD: Si también desea administrar otros estados, puede optar por el enum.

En caso de que alguien quisiera una forma diferente de hacer esto. Sirve para más colores.

struct CustomButton: View 

    @State private var buttonBackColor:Color = .yellow

    var body: some View 
        Button(action: 

            //This changes colors to three different colors.
            //Just in case you wanted more than two colors.
             if (self.buttonBackColor == .yellow) 
                 self.buttonBackColor = .blue
              else if self.buttonBackColor == .blue 
                 self.buttonBackColor = .green
              else 
                 self.buttonBackColor = .yellow
             

            //Same code using switch
            /*
             switch self.buttonBackColor 
             case .yellow:
                 self.buttonBackColor = .blue
             case .blue:
                 self.buttonBackColor = .green
             default:
                 self.buttonBackColor = .yellow
             
             */
        ) 

        Text("My custom button")
            .font(.system(size: 24))
        
        .frame(width: 300, height: 75, alignment: .center)
        .padding(.all, 20)
        .background(buttonBackColor)
    

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *