cocoa - 单击外部时关闭无边框 float NSWindow

标签 cocoa nswindow

我想创建一个 float 在主窗口上方的无边框窗口。主窗口应该是关键窗口(我希望它处理键盘和鼠标事件)。此外,当用户在 float 窗口外部单击时, float 窗口应该关闭。基本上,我正在创建一个非常自定义的上下文菜单,就像 NSMenu 一样。它应该表现得同样。

所以我这样创建了我的窗口:

NSWindow *menuWindow = [NSWindow windowWithContentViewController:menuViewController];

menuWindow.styleMask = NSBorderlessWindowMask;
menuWindow.level = NSFloatingWindowLevel;

[menuWindow makeKeyAndOrderFront:self];

这工作得很好,但是我如何处理外部的点击来关闭它?该窗口不会调用委托(delegate)的 windowDidResignKey,因为它不是关键窗口。如果它确实重载了canBecomeKeyWindow(以便它返回YES),那么 float 窗口会抓取用户输入,这不是我想要的。

那么,有没有办法自动关闭无边框窗口呢? NSPanel 可以帮忙吗?我尝试使用它,但没有成功(besKeyOnlyIfNeeded 选择器不能满足我的需要)。

最佳答案

要检测窗口外但应用内的点击,您可以使用 +[NSEvent addLocalMonitorForEventsMatchingMask:handler:] 安装事件监视器。如果您还想在用户点击其他应用程序时关闭窗口,您可以观察 NSApplicationDidResignActiveNotification 通知。

关于cocoa - 单击外部时关闭无边框 float NSWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34998454/

相关文章:

cocoa - NSView:将 subview 从 super View 拖到另一个NSView

cocoa - 在启用应用程序组的情况下保留标准 NSUserDefaults

cocoa - 更改 NSWindow 标题文本的颜色

cocoa - 将窗口放置在同一点具有不同分辨率的两个显示器上

Cocoa/CoreGraphics/Quartz - 无边框 Quicktime X 窗口,具有圆边

macos - 有条件地处理透明窗口上的鼠标事件

objective-c - NSScrollView 填充

objective-c - 如何在Cocoa中从NSButton的中心点顺时针方向旋转NSButton?

swift - 如何在不窃取 macOS 焦点的情况下显示窗口?

cocoa - 如何使用WebView加载包含 “#”的NSURL?