如何在SwiftUI中对已选中的Text项目应用strikethrough()?

7

我正在尝试在 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变量来应用条件的简单方法,以跟踪何时应用strikethrough()或不应用? 我认为唯一的方法是将一个属性放入listObject中,以跟踪它是否被删除,并使用该属性将true / false应用于strikethrough()修饰符。但那似乎像是意大利面条代码?

1个回答

11

如果您需要数据持久化,那么肯定应该将它放入模型中。否则,@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()
        })
  }
}

有没有办法在TextField视图上应用删除线而不是在Text视图上? - Ram Patra
我认为删除线只在iOS 16.0及以上版本中可用。 - yasin89

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接