Saltar al contenido

SwiftUI – Varios botones en una fila de lista

Solución:

Necesitas usar BorderlessButtonStyle () o PlainButtonStyle ().

    List([1, 2, 3], id: .self) { row in
        HStack {
            Button(action: { print("Button at (row)") }) {
                Text("Row: (row) Name: A")
            }
            .buttonStyle(BorderlessButtonStyle())
            
            Button(action: { print("Button at (row)") }) {
                Text("Row: (row) Name: B")
            }
            .buttonStyle(PlainButtonStyle())
        }
    }

Parece ser un problema específico relacionado con Button cuando está contenido en un List hilera.

Solución alterna:

List {
  HStack {
    Text("One").onTapGesture { print("One") }
    Text("Two").onTapGesture { print("Two") }
  }
}

Esto produce la salida deseada.

También puede utilizar un Group en lugar de Text tener un diseño sofisticado para los “botones”.

Una de las diferencias con SwiftUI es que no está creando instancias específicas de, por ejemplo, UIButton, porque podría estar en una aplicación de Mac. Con SwiftUI, está solicitando un tipo de botón.

En este caso, dado que está en una fila de la lista, el sistema le da un tamaño completo, toque en cualquier lugar para activar la acción, botón. Y dado que ha agregado dos de ellos, ambos se activan cuando toca en cualquier lugar.

Puede agregar dos vistas independientes y darles una .onTapGesture para que actúen esencialmente como botones, pero perdería el flash de la fila de celdas y cualquier otro botón automático como las funciones que SwiftUI daría.

List {
    HStack {
        Text("One").onTapGesture {
            print("Button 1 tapped")
        }

        Spacer()

        Text("Two").onTapGesture {
            print("Button 2 tapped")
        }
    }
}
¡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 *