Как применить зачеркивание () к текстовому элементу с нажатой клавишей foreach в 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(). Но это похоже на спагетти-код?
1 ответ
Решение
Если он вам нужен настойчивый, то обязательно нужно воплотить его в модель. Иначе,
@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()
})
}
}