swiftui:自定义按钮在 ListView 中不起作用
swiftui : Custom Button doesnt work in the ListView
我创建了一个带有 Y 和 N 选项的自定义按钮。 (我无法使用切换按钮,因为我不需要在开始时选择任何选项。
如果按钮被添加到 Vstack 中,它工作得很好。按下的选项被突出显示,另一个选项变暗。
但是当它被添加到列表视图中时,当点击任何按钮时,看起来整个单元格都被点击并且总是选择第二个选项。
我该如何解决这个问题?
导入 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)
}
}
}
}
在此处查看此答案:
并尝试 borderlessbuttonstyle
我创建了一个带有 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)
}
}
}
}
在此处查看此答案:
并尝试 borderlessbuttonstyle