如何将删除线()应用于 SwiftUI 中点击的 foreach 文本项?
How to apply strikethrough() to a tapped foreach Text item in SwiftUI?
我正在尝试将删除线应用于 ForEach 循环中的任何点击文本项:
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 来应用条件,以跟踪何时应用删除线()或不应用?我在想唯一的方法是将 属性 放入跟踪它是否被击中的 listObject 中,然后使用它来将 true/false 应用于 strikethrough() 修饰符。但这似乎像意大利面条代码?
如果你需要它持久化,那么你绝对应该把它放到模型中。否则,@State
仅适用于 run-time,你可以在子视图中进行,如
ForEach(list.items) { item in
RowView(item: item)
}
和行视图:
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()
})
}
}
我正在尝试将删除线应用于 ForEach 循环中的任何点击文本项:
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 来应用条件,以跟踪何时应用删除线()或不应用?我在想唯一的方法是将 属性 放入跟踪它是否被击中的 listObject 中,然后使用它来将 true/false 应用于 strikethrough() 修饰符。但这似乎像意大利面条代码?
如果你需要它持久化,那么你绝对应该把它放到模型中。否则,@State
仅适用于 run-time,你可以在子视图中进行,如
ForEach(list.items) { item in
RowView(item: item)
}
和行视图:
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()
})
}
}