3

我正在尝试将删除线应用于 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 应用于删除线()修饰符。但这似乎是意大利面条代码?

4

1 回答 1

5

如果你需要它持久化,那么你绝对应该把它放到模型中。否则,@State仅用于运行时,您可以在子视图中执行,例如

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()
        })
  }
}
于 2020-09-10T13:11:10.180 回答