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")
}
}
}