【问题标题】:SwiftUI ColorPicker Fails In Background (Menubar) AppSwiftUI ColorPicker 在后台(菜单栏)应用程序中失败
【发布时间】:2022-11-24 15:52:53
【问题描述】:

语境

我有一个只能从 macOS 菜单栏运行的应用程序。 (info.plist中的LSUIElement属性设置为YES)。

单击菜单栏按钮时,此应用程序显示的不是菜单,而是NSPopover。弹出窗口包含一个 NSHostingView,它有一个非常简单的 SwiftUI 视图:

struct PopoverContentView: View
{
    @State private var color: CGColor = .white

    var body: some View
    {
        ColorPicker(selection: $color) {
            Text("Pick a Color:")
        }
    }
}

问题

单击 ColorPicker() 不会打开 macOS 颜色选择器窗口。 ColorPicker() 按钮的用户界面发生变化,显示“已选择”边框状态,但颜色选择器窗口从未出现。

但是,如果我将 LSUIElement 更改为 NO然后通过单击它的 Dock 图标激活该应用程序(这样它就会接管菜单栏),然后单击弹出窗口中的 ColorPicker() 实际上会显示颜色选择器窗口。

您知道强制 macOS 显示后台应用程序的颜色选择器窗口的方法吗?

【问题讨论】:

    标签: macos swiftui appkit color-picker lsuielement


    【解决方案1】:

    答案原来很简单。在单击菜单栏按钮时打开弹出窗口的 AppKit ViewController 中(PopoverController,对我来说),我只是这样做了:

    extension PopoverController: NSPopoverDelegate
    {
        func popoverWillShow(_ notification: Notification)
        {
            NSApp.activate(ignoringOtherApps: true)
        }
    }
    

    ColorPicker 现在可以在点击时正确显示标准的 macOS 系统颜色面板。

    【讨论】:

      猜你喜欢
      • 2023-01-21
      • 1970-01-01
      • 1970-01-01
      • 2023-02-09
      • 2020-05-05
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多