在NSStatusItem上使用NSPopover(Swift 4.2)

时间:2019-01-04 19:17:03

标签: swift first-responder nsstatusitem nspopover nsstatusbar

我已经创建了 NSStatusItem ...

NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)

...,并想在点击我的NSPopover时显示 statusItem

var popover = NSPopover()

因此,我编写了以下功能...

@objc func presentPopover() {

    switch self.popover.isShown {

    case true:
        self.popover.performClose(self)

    case false:
        guard let button = self.statusBarItem.button else { return }
        self.popover.show(relativeTo: button.bounds,
                          of: button,
                          preferredEdge: .minY)

    }
}

...三明治工作正常✅

问题在出现NSPopover时开始出现-弹出窗口不会变为活动状态/拒绝第一个响应者,因此其内容显示为灰色,用户必须单击视图以使其处于活动状态。 ❌

没有成功,我尝试致电:

NSApplication.shared.activate(ignoringOtherApps: true)

较早的解决方案提到必须将自定义视图设置为statusItem.view才能使NSPopover正常工作,但已弃用macOS 10.14 view

  

在OS X 10.14中不推荐使用“视图”:改为使用标准按钮属性

问题:

我正在寻找一种解决方案,其中可以使用Swift 4.2(或更高版本)在NSPopover上成功实现NSStatusItem,并使NSPopup成为键/有效显示弹出窗口后。

0 个答案:

没有答案