Список проблем взаимодействия в SwiftUI
Я пытаюсь создать простое приложение со списком дел, используя Swift для VisionOS. На данный момент, когда пользователь создает свой первый список задач, он может дать ему имя, выбрать его и добавить задачи в список. Однако когда пользователь пытается создать больше списков дел, выбрать их невозможно.
import SwiftUI
struct ContentView: View {
@State private var TodoLists: [TodoList] = []
@State private var selectedTodoList: TodoList? = nil
@State private var showAddListAlert: Bool = false
@State private var newListTitle: String = ""
@State private var nextListID: Int = 0
var body: some View {
NavigationSplitView {
List(TodoLists) { list in
Button(list.title) {
selectedTodoList = list
}
}
.navigationTitle("Todo lists")
.toolbar {
Button("Add") {
showAddListAlert.toggle()
}
}
.alert("Add Todo List", isPresented: $showAddListAlert) {
TextField("Todo List Title", text: $newListTitle)
Button("Cancel", role: .cancel, action: {})
Button("Create") {
let list = TodoList(title: newListTitle.isEmpty ? "List \(nextListID)" : newListTitle, items: [], id: UUID())
TodoLists.append(list)
nextListID += 1
}
}
} detail: {
if let selectedTodoList {
TodoListView(list: selectedTodoList)
}
}
}
}
Я бы подумал, что Button(list.title) { selectedTodoList = list } установит выбранный выбранный список. Возможно, мешает дочернее представление (TodoListView):
import SwiftUI
struct TodoListView: View {
@State var list: TodoList
@State private var showAddTodoAlert: Bool = false
@State private var newTodoTitle: String = ""
var body: some View {
List(list.items) { item in
Text(item.title)
}
.navigationTitle("Details for \(list.title)")
.toolbar {
Button("Add Todo") {
showAddTodoAlert.toggle()
}
}
.alert("Add Todo", isPresented: $showAddTodoAlert) {
TextField("Todo Title", text: $newTodoTitle)
Button("Cancel", role: .cancel, action: {})
Button("Create") {
let todo = TodoItem(title: newTodoTitle, isDone: false)
list.items.append(todo)
}
}
.id(list.id)
}
}
1 ответ
Написание .id(selectedTodoList.id) в подробном представлении ContentView решило проблему. Судя по всему, это ошибка SwiftUI, которая вызывала проблемы.