#swiftui #xcode13 #ios15
Вопрос:
Что касается iOS 15, Xcode 13; Мне интересно, является ли это ошибкой, неправильно реализованной или запланированной нефункциональной функцией…
В списке, содержащем a .swipeActions
, который вызывает a .confirmationDialog
, диалоговое окно подтверждения не отображается.
См. Пример:
import SwiftUI
struct ContentView: View {
@State private var confirmDelete = false
var body: some View {
NavigationView {
List{
ForEach(1..<10) {_ in
Cell()
}
.swipeActions(edge: .trailing) {
Button(role: .destructive) {
confirmDelete.toggle()
} label: {
Label("Delete", systemImage: "trash")
}
.confirmationDialog("Remove this?", isPresented: $confirmDelete) {
Button(role: .destructive) {
print("Removed!")
} label: {
Text("Yes, Remove this")
}
}
}
}
}
}
}
struct Cell: View {
var body: some View {
Text("Hello")
.padding()
}
}
Ответ №1:
Неправильная конфигурация:
Модификатор представления .confirmationDialog
необходимо добавить в представление, которое находится за пределами модификатора .swipeActions
представления. Он работает при правильной настройке, как показано ниже:
import SwiftUI
struct ContentView: View {
@State private var confirmDelete = false
var body: some View {
NavigationView {
List{
ForEach(1..<10) {_ in
Cell()
}
.swipeActions(edge: .trailing) {
Button(role: .destructive) {
confirmDelete.toggle()
} label: {
Label("Delete", systemImage: "trash")
}
}
//move outside the scope of the .swipeActions view modifier:
.confirmationDialog("Remove this?", isPresented: $confirmDelete) {
Button(role: .destructive) {
print("Removed!")
} label: {
Text("Yes, Remove this")
}
}
}
}
}
}
struct Cell: View {
var body: some View {
Text("Hello")
.padding()
}
}