我有一个 SwiftUI-View MyView
,单击按钮时会显示一个 View Controller 。呈现的 View Controller (在 UIKit 中实现并通过 MyPresentedView 中的 UIViewControllerRepresentable 封装)获取到 isShowingAlert 的绑定(bind)以指示应处理的错误情况通过在工作表关闭后显示警报。
struct MyView: View {
@State private var isShowingSheet = false
@State private var isShowingAlert = false
var body: some View {
Button(action: { self.isShowingSheet.toggle() }) {
Text("Show Sheet")
}
.sheet(isPresented: $isShowingSheet) {
MyPresentedView(alert: self.$isShowingAlert)
}
.alert(isPresented: $isShowingAlert) {
Alert(title: Text("title"), message: Text("message"), dismissButton: .default(Text("OK")))
}
}
}
问题:由于所呈现的 View Controller 在仍然呈现时切换 isShowingAlert
,因此 SwiftUI 似乎尝试在工作表仍然呈现时呈现警报。这会导致日志消息如下:
Warning: Attempt to present <SwiftUI.PlatformAlertController ...> on ... which is already presenting (null)
是否有适当的方法可以将 .alert
延迟到 .sheet
被关闭之后?
最佳答案
仅供记录,以下是我在评论中提到的潜在解决方案的草图:
struct MyView: View {
@State private var isShowingSheet = false
@State private var errorDuringSheet = false
@State private var isShowingAlert = false
var body: some View {
Button(action: { self.isShowingSheet.toggle() }) {
Text("Show Sheet")
}
.sheet(isPresented: $isShowingSheet, onDismiss: propagateError) {
MyPresentedView(alert: self.$errorDuringSheet)
}
.alert(isPresented: $isShowingAlert) {
Alert(title: Text("title"), message: Text("message"), dismissButton: .default(Text("OK")))
}
}
func propagateError() {
isShowingAlert = errorDuringSheet
errorDuringSheet = false
}
}
仍然欢迎任何更好的解决方案。
关于swift - 呈现工作表后显示警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62180650/