单击外部关闭无边框浮动 NSWindow

evg*_*eny 2 cocoa nswindow

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

所以我以这种方式创建了我的窗口:

NSWindow *menuWindow = [NSWindow windowWithContentViewController:menuViewController];

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

[menuWindow makeKeyAndOrderFront:self];
Run Code Online (Sandbox Code Playgroud)

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

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

JWW*_*ker 5

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