swiftui:自定义按钮在ListView中不起作用

swiftui:自定义按钮在ListView中不起作用,swift,swift5,xcode11,Swift,Swift5,Xcode11,我创建了一个带有Y和N选项的自定义按钮。(我无法使用切换按钮,因为我不需要在开始时选择任何选项 如果该按钮添加到Vstack中,则工作正常。按下的选项将高亮显示,另一个选项将变暗 但是,当它添加到列表视图中时,当单击任何按钮时,看起来整个单元格都被单击了,并且总是选择第二个选项。 我如何解决这个问题 导入快捷键 struct ContentView: View { var body: some View { VStack{ MultiSele

我创建了一个带有Y和N选项的自定义按钮。(我无法使用切换按钮,因为我不需要在开始时选择任何选项

如果该按钮添加到Vstack中,则工作正常。按下的选项将高亮显示,另一个选项将变暗

但是,当它添加到列表视图中时,当单击任何按钮时,看起来整个单元格都被单击了,并且总是选择第二个选项。 我如何解决这个问题

导入快捷键

struct ContentView: View {

    var body: some View {

        VStack{
            MultiSelectionButtonView()

            Form{
                MultiSelectionButtonView()

                MultiSelectionButtonGroup()
            }
        }
    }
}


struct MultiSelectionButtonView: View {

    var body: some View {
        HStack{
            Text("Question")
            Spacer()
            MultiSelectionButtonGroup()

        }
    }
}

struct MultiSelectionButtonGroup: View {
    @State private var selectedOption : Int = 0

    var body: some View {

        HStack (spacing: 0){
            MultiSelectionButton(tag: 1, text: "Y", selectedOption: $selectedOption)
            MultiSelectionButton(tag: 2, text: "N", selectedOption: $selectedOption)
        }

    }
}

struct MultiSelectionButton: View {

    @State var tag : Int
    @State var text : String
    @Binding var selectedOption : Int


    var shapeSize : CGFloat = CGFloat(35)
    var strokeWidth : CGFloat = CGFloat(0.5)
    var cornerRadius : CGFloat = CGFloat(2)

    var colorSelected : Color = Color.green
    var colorNoSelected : Color = Color.gray.opacity(0.5)
    var colorStroke : Color = Color.gray

    var body: some View {


        Button(action: {
            self.selectedOption = self.tag
        }) {
            ZStack{
                Group {
                    RoundedRectangle(cornerRadius: self.cornerRadius, style: .continuous)
                        //Circle()
                        .fill((self.selectedOption == self.tag) ? colorSelected : colorNoSelected )

                    RoundedRectangle(cornerRadius: self.cornerRadius, style: .continuous)
                        //Circle()
                        .stroke(colorStroke, lineWidth: strokeWidth)
                }
                .frame(width: shapeSize, height: shapeSize)

                Text(text)
                    .font(.subheadline)
                    .fontWeight(.light)
                    .foregroundColor(Color.white)
            }
        }
    }
}

请在此处检查此答案:


然后尝试无边框按钮样式

在此处检查此答案:

试试无边框的纽扣