我用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)
}
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句