4

Given the code below I expected to see selection be ZERO after tapping on the ZERO button, but it always is ONE. In fact, I need not tap on the button name, but in the middle of the row, and the selection will still be ONE. This is unexpected behavior and possibly a bug. Anyone has an explanation and/or workaround for this? Using iOS 14.0 and 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")
                }
            }
        }
    }     
}
0

1 Answer 1

3

Use 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())
                    
            }
        }
    }
}

I added .foregroundColor(.blue) to button text because if you add .buttonStyle(PlainButtonStyle()) to your button it will make your buttons look like plain text.

Sign up to request clarification or add additional context in comments.

3 Comments

This works as expected, but I still don't understand why this works and the other approach doesn't -- why does using PlainButtonStyle() matter?
I followed the link to a similar question and got this quote which answers my question: "In this case since you are in a list row, the system gives you a full size, tap anywhere to trigger the action, button. And since you've added two of them, both are triggered when you tap anywhere." ... stackoverflow.com/questions/56561064/…
@andrewz In that post Jonathan answered why (the same thing you quoted) :)

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.