SwiftUI: проблемы с созданием представления подтверждения удаления из спискаIOS

Программируем под IOS
Ответить
Anonymous
 SwiftUI: проблемы с созданием представления подтверждения удаления из списка

Сообщение Anonymous »

У меня есть представление со списком. Когда элемент удаляется из списка, я хочу показать лист, чтобы подтвердить, что пользователь действительно хочет удалить элемент.
В представлении со списком, когда пользователь удаляет строку , я сохраняю удаленные смещения в переменной состояния. Затем я показываю DeleteConfirmationView

Код: Выделить всё

@State private var deleteOffsets: IndexSet?
Я передаю deleteOffsets в элемент управления DeleteConfirmationView, чтобы данные можно было удалить, если пользователь подтвердит.
Сводка примера кода:
р>

Код: Выделить всё

var body: some View {
Group {
List {
ForEach(...) {
//stuff
}
.onDelete(perform: preDelete)
}
}
.sheet(isPresented: $showDeleteConfirmation) {
if let delOffsets = deleteOffsets {
DeleteConfirmationView(delValue: fakeData[delOffsets.first!].aValue, delIndex: delOffsets.first) {
realDelete(at: delOffsets)
}
}
else {
Text("Error")
}
}

}

func preDelete(at offsets: IndexSet) {
deleteOffsets = offsets
showDeleteConfirmation = true
}

func realDelete(at offsets: IndexSet) {
offsets.forEach { index in
let aData = fakeData[index]
context.delete(aData)
}
}

Однако deleteOffsets равен нулю, когда вводится код внутри .sheet. Я установил точки останова отладчика и гарантировал, что preDelete вызывается до достижения кода внутри .sheet. Но deleteOffsets по-прежнему равен нулю!!
Что я делаю неправильно? Может ли кто-нибудь мне помочь?
В этом репозитории есть код.

Подробнее здесь: https://stackoverflow.com/questions/790 ... rom-a-list
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»