我正在尝试对ForEach循环中的任何点击的Text项应用删除线:
struct BrandListView: View {
@ObservedObject var list: ListObject
var body: some View {
ScrollView {
VStack {
ForEach(list.items) { items in
Text(item.name)
.strikethrough(//?)
.onTapGesture(perform: {
// on tap, apply strikethrough only to this item.
})
}
}
}
}
}
有没有一种简单的方法可以使用@State var来应用条件,以跟踪何时应用striketthrough((?我认为唯一的方法是将一个属性放入listObject中,以跟踪它是否被删除,然后使用它将true/false应用于striketthrough((修饰符。但这看起来像意大利面条代码?
如果您需要它的持久性,那么您肯定应该将它放入模型中。否则,@State
仅用于运行时,您可以在子视图中执行,如
ForEach(list.items) { item in
RowView(item: item)
}
和RowView:
struct RowView: View {
let item: Your_Item_Type
@State private var stroken = false
var body: some View {
Text(item.name)
.strikethrough(stroken)
.onTapGesture(perform: {
self.stroken.toggle()
})
}
}