我想制作一个应用程序,用户按下一个按钮,然后当他们选择一个选项时,会弹出另一个警报。当我尝试类似的事情时;
struct ContentView: View {
@State private var showingAlert = false
@State private var showingAlertII = false
var body: some View {
Button(action: {
self.showingAlert = true
}, label: {
Text("button")
.alert(isPresented: $showingAlert) {
Alert(title: Text("Option one or two"), message: Text("choose"), primaryButton: .default(Text("one"), action: {
// do some specific actions
self.showingAlertII = true
}), secondaryButton: .default(Text("two"), action: {
//do some other stuff
self.showingAlertII = true
}))
}
.alert(isPresented: $showingAlertII) {
Alert(title: Text("Option A or B"), message: Text("choose"), primaryButton: .default(Text("Split"), action: {
// do something
}), secondaryButton: .default(Text("B"), action: {
//do something
}))
}
})
Run Code Online (Sandbox Code Playgroud)
没有显示任何警报。请注意,还有另一篇教程:How can I have two Alerts on one view in SwiftUI? 然而,与此类似,使用 .first 表示法并返回一个或另一个对我来说不起作用,因为我希望两个都显示,一个接一个。
您无法在不覆盖其中一个的情况下直接进行两个 .alert 调用。关键是在单个 .alert 调用中获取所有逻辑。
import SwiftUI
enum ActiveAlert {
case first, second, third
}
struct ContentView: View {
@State private var showingAlert = false
@State private var activeAlert: ActiveAlert = .first
var body: some View {
Button(action: {
self.showAlert(.first)
}, label: {
Text("button")
.alert(isPresented: $showingAlert) {
switch activeAlert {
case .first:
return Alert(title: Text("First Alert"), dismissButton: .default(Text("Next"), action: {
self.showAlert(.second)
}))
case .second:
return Alert(title: Text("Second Alert"), dismissButton: .default(Text("Next"), action: {
self.showAlert(.third)
}))
case .third:
return Alert(title: Text("Third Alert"), dismissButton: .default(Text("Ok"), action: {
//...
}))
}
}
})
}
func showAlert(_ active: ActiveAlert) -> Void {
DispatchQueue.global().async {
self.activeAlert = active
self.showingAlert = true
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1100 次 |
| 最近记录: |