将 window 置于最前面时,其他 window 置于最前面

Other window comes to front when bring window to front

在我的应用程序中,我有 windows 显示通知。我从 xib 实例化控制器,然后调用 makeKeyAndOrderFront 使 window 可见。我也将它的级别调整为NSScreenSaverWindowLevel,这样它就会出现在其他人面前。

问题是,当我单击此 window 以使用它时,我的应用程序的主要 window 出现在最前面。我还打开了其他 Windows 我的应用程序,我注意到它们发生了相同的行为。

根据 Apple 在 NSWindow 上的文档,将 window 放在前面不应更改任何其他 Windows 的顺序,因此我感到困惑。

备选方案

您是否考虑过使用 NSAlert 来显示这些通知?

我不知道你想向用户展示什么,但如果它只是一个通知,NSUserNotification也是一个不错的方式。用户得到通知,但不会中断他正在做的事情。

原来这个问题与 this other question 有关。我在这里没有提到的一个重要部分是我的应用程序中出现此问题的 windows 是 titlebar-less。

默认情况下,当您有 titlebar-less window 时,Cocoa 不允许它成为主要 window。我将 NSWindow 子类化并始终将 canBecomeMainWindow 覆盖为 return YES,这解决了我的问题。

这也解释了为什么我的 windows 可以调整大小,但调整大小的手柄从未单独出现;只有 main windows 获得调整大小句柄!