小编sil*_*fer的帖子

如何在 SwiftUI 应用程序生命周期中将 statusBar 传递给 popover 中的 contentView?

我正在尝试使用 SwiftUI 2.0(应用程序结构)中引入的 SwiftUI 应用程序生命周期创建一个菜单栏应用程序,其中 SwiftUI 代码中的按钮和操作将更新状态栏项目的文本。我正在创建一个状态栏项目,它将触发一个包含 SwiftUI 视图的弹出窗口。根据我的理解,最好的方法是将 statusBar 传递给 ContentView 的子级,后者将能够使用 statusBar 作为环境对象。但是,我遇到一个我不明白的问题,即在应用程序委托中工作的代码在 SwiftUI 2.0 init 函数中失败(不清楚原因)。我希望我已将下面所有相关的代码包含在一个单独的示例中,以触及问题的核心。

我有一个工作解决方案,使用NSApplicationDelegateAdaptorstatusBar 在 ContentView 之前初始化,并且 statusBar 只是作为环境对象传递到 ContentView:

import SwiftUI
import AppKit

@main
struct test_status_bar_appApp: App {
    @NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

    var body: some Scene {
        Settings{
            EmptyView()
        }
    }
}

class AppDelegate: NSObject, NSApplicationDelegate {
    var popover = NSPopover.init()
    var statusBar: StatusBarController?

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        // Create the Status Bar Item with the Popover
        statusBar = StatusBarController.init(popover)

        // …
Run Code Online (Sandbox Code Playgroud)

macos nsstatusbar swift swiftui

7
推荐指数
1
解决办法
730
查看次数

标签 统计

macos ×1

nsstatusbar ×1

swift ×1

swiftui ×1