Swift NSPopover在打开后未收到第一次单击

Swift NSPopover在打开后未收到第一次单击,swift,macos,mouseevent,popover,nspopover,Swift,Macos,Mouseevent,Popover,Nspopover,我有一个nspover,我已经设置了它的contentViewController,并且正在使用它来显示一些自定义UI。当用户单击mac顶部状态栏中的状态项时,popover设置为打开。我目前面临的问题是,当我打开popover时,在popover上的按钮开始响应单击之前,总是需要单击窗口上的任何位置。我的按钮的实现方式是,它们是NSView子类,在这些子类中,我使用event:NSEvent重写了override func mouseDown等方法。这是我用来打开popover的代码: gua

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

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

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

如果你的应用程序只有弹出菜单,那么你需要从该弹出窗口获取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一样简单,就像在

中尝试window.makeKey那样!谢谢@Leodabus我的应用程序只有popover,那么如何获取窗口?