Je cherche à faire une SwiftUI liste dans laquelle chaque nouvel élément de liste est présentée en haut de la liste. Pour ce faire, j'ai ajouté .inversé() pour le tableau passé dans la boucle ForEach, représenté par viewModel.itemList
. J'ai également mis en place .onDelete pour gérer la suppression des éléments de la liste. Cependant, quand je supprime un élément, comme le dernier élément de la liste, au lieu de supprimer le dernier élément du tableau (l'élément en haut de la liste). Comment puis-je configurer .onDelete pour supprimer l'élément correct lorsque le tableau est inversé?
Voir mon code ci-dessous. Merci!
ContentView
struct ContentView: View {
@StateObject var viewModel = ToDoListViewModel()
@State private var listItemName = ""
var body: some View {
NavigationView {
VStack(alignment: .leading) {
List {
ForEach(viewModel.itemList.reversed()) { item in
Text(item.listItem)
}.onDelete { index in
self.viewModel.itemList.remove(atOffsets: index)
}
}
HStack {
TextField("Enter List Item", text: $listItemName)
Button(action: {
viewModel.addToList(ToDoModel(listItem: listItemName))
listItemName = ""
}) {
Image(systemName: "plus")
.font(.largeTitle)
.frame(width: 75, height: 75)
.foregroundColor(Color.white)
.background(Color.blue)
.clipShape(Circle())
}
}.frame(minWidth: 100, idealWidth: 150, maxWidth: 500, minHeight: 30, idealHeight: 40, maxHeight: 50, alignment: .leading)
.padding(.leading, 16)
.padding(.trailing, 16)
}.navigationBarTitle("To Do List", displayMode: .inline)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Modèle
struct ToDoModel: Identifiable, Codable {
var id = UUID()
var listItem: String = ""
}
ViewModel
class ToDoListViewModel: ObservableObject {
@Published var itemList = [ToDoModel]()
func addToList( _ item: ToDoModel) {
itemList.append(item)
}
}