Her yeni liste öğesinin listenin en üstünde sunulduğu temel bir SwiftUİ listesi yapmaya çalışıyorum. Bunu yapmak için ekledim .tarafından temsil edilen ForEach döngüsüne geçirilen diziye reversed() viewModel.itemList
. Ayrıca kurdunuz .Liste öğelerinin kaldırılmasını işlemek için onDelete. Ancak, listedeki son öğe gibi bir öğeyi sildiğimde, bunun yerine dizideki son öğeyi (listenin en üstündeki öğe) siler. Nasıl yapılandırabilirim .Dizi tersine çevrildiğinde doğru öğeyi silmek için onDelete?
Aşağıdaki koduma bakın. Teşekkürler!
İçerik Görünümü
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()
}
}
Model
struct ToDoModel: Identifiable, Codable {
var id = UUID()
var listItem: String = ""
}
Görünüm Modeli
class ToDoListViewModel: ObservableObject {
@Published var itemList = [ToDoModel]()
func addToList( _ item: ToDoModel) {
itemList.append(item)
}
}