我有一个SwiftUI-View MyView
,当单击一个按钮时,它会显示一个视图控制器。呈现的视图控制器(在UIKit中实现,并通过UIViewControllerRepresentable
中的MyPresentedView
包装)绑定到isShowingAlert
,以指示错误情况,应通过在关闭工作表后显示警报来处理该错误情况
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")))
}
}
}
问题:由于所呈现的视图控制器在isShowingAlert
仍在显示时会进行切换,因此SwiftUI似乎试图在仍显示工作表的同时显示警报。这样会产生日志消息,例如:
警告:尝试在已经显示(为空)的...上显示
是否有适当的方法将.alert
推迟到.sheet
被解雇之后?
答案 0 :(得分:0)
仅作记录,以下是我在评论中提到的潜在解决方案的草图:
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
}
}
仍然欢迎任何更好的解决方案。