如何在 SwiftUI 中一个接一个地显示多个警报对话框?
Posted
技术标签:
【中文标题】如何在 SwiftUI 中一个接一个地显示多个警报对话框?【英文标题】:How can you show multiple alert dialogs, one after the other, in SwiftUI? 【发布时间】:2021-07-11 09:30:50 【问题描述】:以下代码显示了一个“删除文件”按钮。当用户按下它时,会出现一个确认警报对话框。当用户在第一个对话框上按“删除”时,我想显示第二个警报对话框,确认文件已被删除。但是,它从未出现,即使调试代码确认第二个“return Alert...”语句实际上正在按预期执行。有没有办法让第二个警报也出现?
import SwiftUI
enum alertShownType
case alertNone, alertDeleteFile,alertFileDeleted
struct ContentView: View
@State var showingAlert = false
@State var alertShown: alertShownType = alertShownType.alertNone
var body: some View
Button(action:
self.alertShown = alertShownType.alertDeleteFile
self.showingAlert = true
)
Text("Delete file")
.padding(EdgeInsets(top: 0, leading: 0, bottom: 10, trailing:0))
.alert(isPresented: $showingAlert, content:
if (alertShown == alertShownType.alertDeleteFile)
return Alert(title: Text("Delete file"),
message: Text("Are you sure?"),
primaryButton: .destructive(Text("Delete"))
// Delete the file
....
// Show the next alert
alertShown = alertShownType.alertFileDeleted
showingAlert = true
,
secondaryButton: .cancel())
else // alertFileDeleted
return Alert(title: Text("File deleted"), message:
Text("Done!"),
dismissButton: .default(Text("OK")))
)
struct ContentView_Previews: PreviewProvider
static var previews: some View
ContentView()
【问题讨论】:
谢谢,但这无济于事。我已经可以使用枚举值从我的应用程序的单个页面显示多个不同的警报。问题是当按下主按钮时,如何在在第一个警报的操作中显示第二个警报。 【参考方案1】:你只需要
public func alert<Item>(item: Binding<Item?>, content: (Item) -> Alert)
不需要@State var showingAlert = false
标志。
像这样设置你的代码
enum alertShownType : Identifiable
case alertNone,
alertDeleteFile,
alertFileDeleted
var id : Int get
hashValue
struct ContentViewAlerts: View
@State var alertShown: alertShownType?
var body: some View
Button(action:
self.alertShown = alertShownType.alertDeleteFile
)
Text("Delete file")
.padding(EdgeInsets(top: 0, leading: 0, bottom: 10, trailing:0))
.alert(item: $alertShown, content: alertType in
if (alertShown == alertShownType.alertDeleteFile)
return Alert(title: Text("Delete file"),
message: Text("Are you sure?"),
primaryButton: .destructive(Text("Delete"))
// Delete the file
// ....
// Show the next alert
alertShown = alertShownType.alertFileDeleted
,
secondaryButton: .cancel())
else // alertFileDeleted
return Alert(title: Text("File deleted"), message:
Text("Done!"),
dismissButton: .default(Text("OK")))
)
【讨论】:
太好了。谢谢!只需要进行一项额外的更改。枚举需要是“可识别的”。我已经编辑了你的答案以包含这个新的枚举。 @Ant 是的,我只是忘记添加。谢谢。以上是关于如何在 SwiftUI 中一个接一个地显示多个警报对话框?的主要内容,如果未能解决你的问题,请参考以下文章
当用户输入的时间低于预期时间时,如何在 swiftUI 中显示警报消息?
一个视图中的多个警报只能在 swiftui 中始终使用最后一个警报