複数のボタンを使用した場合のSwiftUIフォームコンテナでの予期しない動作[重複]

Nov 27 2020

以下のコードを考えると、ボタンをZEROタップした後に選択が行われることを期待してZEROいましたが、常にですONE。実際、ボタン名をタップする必要はありませんが、行の中央にあり、選択は引き続きですONE。これは予期しない動作であり、バグである可能性があります。誰かがこれについての説明および/または回避策を持っていますか?iOS14.0およびXcode12.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")
                }
            }
        }
    }     
}

回答

2 HarshilPatel Nov 27 2020 at 04:44

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

.foregroundColor(.blue)ボタンに追加する.buttonStyle(PlainButtonStyle())と、ボタンがプレーンテキストのように見えるため、ボタンテキストに追加しました。