小编Dal*_*One的帖子

SwiftUI 中的全局警报

我正在尝试在 SwiftUI 中呈现全局警报。此警报应显示在所有内容之上,无论当前在屏幕上显示/呈现什么内容(例如工作表)。

这是我的代码:

@main
struct MyApp: App {
    
    @State private var showAlert = false
    
    var body: some Scene {
        WindowGroup {
            MainView()
                .onReceive(NotificationCenter.default.publisher(for:NSNotification.Name.SomeNotification), perform: { _ in
                    showAlert = true
                })
                .alert(
                    isPresented: $showAlert,
                    content: {Alert(title: Text("Alert!"))}
                )
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这在某些情况下不起作用,例如,如果在屏幕上当前呈现工作表时收到通知。在这种情况下,不会显示警报,并且控制台上会显示以下消息:

块引用 [演示] 尝试在 < TtGC7SwiftUI19UIHostingControllerGVS_15ModifiedContentVS_7AnyViewVS_12RootModifier _: 0x7fbee642ac60> 上呈现 <SwiftUI.PlatformAlertController: 0x7fbee6921400> (来自 < TtGC7SwiftUI19UIHostingControllerGVS_15ModifiedContentVS_7AnyViewVS_ 12RootModifier _: 0x7fbee642ac60>) 已经呈现 < TtGC7SwiftUI22SheetHostingControllerVS_7AnyView : 0x7fbee8405360>。

这是有道理的,因为我试图在已经呈现工作表的视图上呈现警报。

在 UIKit 上,我使用以下类实现了这一点:

class GlobalAlertController: UIAlertController {
    
    var globalPresentationWindow: UIWindow?
    
    func presentGlobally(animated: Bool, completion: (() …
Run Code Online (Sandbox Code Playgroud)

swiftui

6
推荐指数
1
解决办法
1507
查看次数

标签 统计

swiftui ×1