我見過一個使用選單的應用程式,當你按下一個按鈕時,我被要求“確認”。這讓我重構了我的應用程式:
@State var confirmDeletion: Bool = false
VStack {
Button(role: .destructive) {
self.confirmDeletion = true
} label: {
Spacer()
Text("Delete")
Spacer()
}.confirmationDialog(
"Are you sure?",
isPresented: $confirmDeletion,
titleVisibility: .visible
) {
Button("Yes", role: .destructive) {
DispatchQueue.main.async {
Task {
await doSomeAsynWork()
}
}
}
Button("Cancel", role: .cancel) {}
}
}
這很好用。現在使用 Menu 重構:
Menu {
[..] // other buttons
Button(role: .destructive) {
print("I was called... and that's it")
self.confirmDeletion = true
} label: {
Label("Delete", systemImage: "trash")
}.confirmationDialog(
"Are you sure?",
isPresented: $confirmDeletion,
titleVisibility: .visible
) {
Button("Yes", role: .destructive) {
DispatchQueue.main.async {
Task {
await doSomeAsynWork()
}
}
}
Button("Cancel", role: .cancel) {}
}
} label: {
Label("Menu", systemImage: "line.horizontal.3.decrease.circle")
}
我知道當您按下任何選單按鈕時,它會立即關閉,所以這就是confirmationDialog不起作用的原因。我可以confirmationDialog通過 Menu實作嗎?
uj5u.com熱心網友回復:
把它移到外面Menu,比如
Menu {
[..] // other buttons
Button(role: .destructive) {
print("I was called... and that's it")
self.confirmDeletion = true
} label: {
Label("Delete", systemImage: "trash")
}
} label: {
Label("Menu", systemImage: "line.horizontal.3.decrease.circle")
}
.confirmationDialog( // << here !!
"Are you sure?",
isPresented: $confirmDeletion,
titleVisibility: .visible
) {
Button("Yes", role: .destructive) {
DispatchQueue.main.async {
Task {
await doSomeAsynWork()
}
}
}
Button("Cancel", role: .cancel) {}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/386162.html
