swift - 提交工作表后显示警报
问题描述
我有一个 SwiftUI-View MyView
,它在单击按钮时显示一个视图控制器。呈现的视图控制器(在 UIKit 中实现并通过UIViewControllerRepresentable
in包装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 似乎试图在表单仍然呈现时呈现警报。这会产生如下日志消息:
警告:尝试在已经呈现的 ... 上呈现 <SwiftUI.PlatformAlertController ...> (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
}
}
仍然欢迎任何更好的解决方案。
推荐阅读
- python - Python从另一个列表创建列表
- grpc - 是否存在任何 gRPC 服务命名限制?
- javascript - 反应中的输入字段插入符号位置问题
- haskell - Haskell - 如何从字符串中绘制字符列表?
- cordova - 无法为 org.gradle.internal.extensibility.DefaultExtraPropertiesExtension 类型的对象获取未知属性“supportAnnotationsVersion”
- android - 如何从片段获取数据到活动?
- c# - 提高 C# 中正则表达式的速度
- c# - 查找动态生成的组件 Unity
- java - 如何连接数据库以插入、更新、删除 android studio
- duplicates - 自动复制网页其他页面中的部分