【发布时间】:2023-01-19 11:40:04
【问题描述】:
我试图在当时打开的所有其他视图和工作表或警报之上全局显示 Alert,因此我可以显示程序运行时随时可能发生的全局相关错误。这可能吗?我的程序是针对 Mac 的,所以 UIKit 解决方法不起作用...提前致谢 :)
您可以在任何视图上应用以下修饰符,它将在该视图以及在此视图中创建的其他工作表和警报的顶部显示错误,但不会在子视图中创建的那些工作表的顶部显示错误。
MyView()
.modifier(AlertPresenter())
struct AlertPresenter: ViewModifier {
@StateObject var alertViewModel: AlertViewModel = AlertViewModel()
func body(content: Content) -> some View {
content
.alert(alertViewModel.errorTitle,
isPresented: $alertViewModel.showError,
actions: {
Button("Ok") {
alertViewModel.showError = false
}
}, message: {
Text(alertViewModel.errorMessage)
})
}
}
class AlertViewModel: ObservableObject {
@Published var showError: Bool = false
@Published var errorTitle: String = "An Error Occurred!"
@Published var errorMessage: String = unknownString
init() {
NotificationCenter.default.addObserver(self, selector: #selector(errorOccurred), name: errorOccurredNotificationName, object: nil)
}
@objc func errorOccurred(_ notification: Notification) {
guard let error = notification.object as? Error else { return }
errorMessage = error.localizedDescription
showError = true
}
}
【问题讨论】:
-
一些观察:每次使用
.modifier(AlertPresenter())时,它都会创建一个新的AlertViewModel()。您可以尝试使用zIndex(...)将警报置于其他视图之上。 -
谢谢,我现在已经尝试了
zIndex(...),但在这种情况下不起作用。我现在已经以一种不太优雅的方式解决了我的具体问题,但是仍然非常欢迎我如何正确地做到这一点的任何想法......
标签: swiftui popup alert global