Nieoczekiwane zachowanie w kontenerze SwiftUI Form podczas używania wielu przycisków [duplikat]

Nov 27 2020

Biorąc pod uwagę poniższy kod, spodziewałem się, że wybór nastąpi ZEROpo naciśnięciu ZEROprzycisku, ale zawsze tak jest ONE. W rzeczywistości nie muszę stukać w nazwę przycisku, ale w środku rzędu, a wybór nadal będzie ONE. Jest to nieoczekiwane zachowanie i prawdopodobnie błąd. Czy ktoś ma wyjaśnienie i / lub obejście tego problemu? Korzystając z iOS 14.0 i Xcode 12.2

struct TestForm : View {
    
    @State var selection = ""
    
    var body : some View {
        Form {
            Text("selection: \(selection)")
            HStack {
                Button(action: {
                    selection = "ZERO"
                }) {
                    Text("ZERO")
                }
                Spacer()
                Button(action: {
                    selection = "ONE"
                }) {
                    Text("ONE")
                }
            }
        }
    }     
}

Odpowiedzi

2 HarshilPatel Nov 27 2020 at 04:44

Użyj PlainButtonStyle ().

struct ContentView: View {
    @State var selection = ""
    
    var body : some View {
        Form {
            Text("selection: \(selection)")
            HStack {
                Button(action: {
                selection = "ZERO"
            }) {
                Text("ZERO")
                .foregroundColor(.blue)
            }.buttonStyle(PlainButtonStyle())
                
            Spacer()
                
            Button(action: {
                selection = "ONE"
            }) {
                Text("ONE")
                .foregroundColor(.blue)
            }.buttonStyle(PlainButtonStyle())
                    
            }
        }
    }
}

Dodałem .foregroundColor(.blue)do tekstu przycisku, ponieważ jeśli dodasz .buttonStyle(PlainButtonStyle())do przycisku, sprawi, że przyciski będą wyglądać jak zwykły tekst.