【问题标题】:NSPopover doesn't receive first click after openingNSPopover 打开后没有收到第一次点击
【发布时间】:2019-04-02 23:11:39
【问题描述】:

我有一个 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)

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

【问题讨论】:

  • 你试过window.makeKey()
  • 做到了!谢谢@LeoDabus
  • 我的应用只有popover,如何获取window?

标签: swift macos mouseevent popover nspopover


【解决方案1】:

如果您的应用只有弹出菜单,那么您需要从该弹出菜单中获取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 中一样

【讨论】:

    猜你喜欢
    • 2014-03-07
    • 1970-01-01
    • 2020-10-04
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多