NSPopover打开后没有收到第一次点击

时间:2019-04-02 23:11:40

标签: swift macos mouseevent popover nspopover

我有一个NSPopover,我已为其设置了contentViewController,并且正在用于显示一些自定义UI。当用户单击其Mac顶部状态栏中的状态项时,弹出窗口设置为切换为打开。我当前面临的问题是,当我打开弹出窗口时,在弹出窗口上的按钮开始响应点击之前,总是需要在窗口的任何位置单击一次。我的按钮的实现方式是它们是NSView子类,在这些子类中我重写了override func mouseDown (with event: NSEvent)之类的方法。这是我用来打开弹出窗口的代码:

guard let button = statusItem.button else { return }
popoverView.show(relativeTo: button.bounds, of: button, preferredEdge: NSRectEdge.minY)

有人知道我能做些什么来确保弹出窗口在打开后立即响应鼠标事件吗?

1 个答案:

答案 0 :(得分:0)

如果您的应用仅具有弹出菜单,那么您需要从该弹出窗口获取NSWindow

@objc func togglePopover(_ sender: AnyObject?) {
        if let button = self.statusBarItem.button {
            if self.popover.isShown {
                self.popover.performClose(sender)
            } else {
                self.popover.show(
                    relativeTo: button.bounds,
                    of: button, preferredEdge: NSRectEdge.minY
                )
                self.popover
                    .contentViewController?
                    .view.window?
                    .makeKey()
            }
        }
    }

如果您已经拥有NSWindow的实例,它应该像调用window.makeKey()一样简单,就像comment