swiftui: пользовательская кнопка не работает в ListView - PullRequest
0 голосов
/ 14 февраля 2020

Я создал пользовательскую кнопку с параметрами Y и N. (Я не мог использовать кнопку Toggle, так как мне не нужно было выбирать опции в начале.

Если кнопка добавлена ​​в Vstack, она работает отлично. Подсвеченная опция подсвечивается, другая опция тускнеет .

Но когда он добавляется в виде списка, когда нажимается любая кнопка, создается впечатление, что нажата вся ячейка, и всегда выбирается второй вариант. Как я могу исправить проблему?

enter image description here импорт SwiftUI

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

1 Ответ

0 голосов
/ 14 февраля 2020

проверьте этот ответ здесь:

SwiftUI - несколько кнопок в строке списка

и попробуйте стиль без полей

...