将窗户带到前面时,其他窗口会出现在前面

时间:2016-02-16 04:53:59

标签: cocoa nswindow nswindowcontroller

在我的应用中,我有显示通知的窗口。我从xib实例化控制器,然后调用makeKeyAndOrderFront使窗口可见。我还将其级别调整为NSScreenSaverWindowLevel,以使其显示在其他人面前。

问题是,当我点击此窗口使用它时,我的应用程序的主窗口出现在前面。我还有其他Windows我的应用程序打开,我注意到他们发生了同样的行为。

根据Apple在NSWindow的文档,将窗口带到前面不应该改变任何其他Windows的顺序,因此我的困惑。

2 个答案:

答案 0 :(得分:0)

替代

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

我不知道您要向用户展示什么,但如果只是通知,NSUserNotification也是一种不错的方式。用户会得到通知,但不会因为他正在做的事而中断。

答案 1 :(得分:0)

原来这个问题与this other question有关。我在这里没有提到的一个重要部分是我的应用程序中显示此问题的窗口是标题栏。

默认情况下,当你有一个无标题栏的窗口时,Cocoa不允许它成为主窗口。我将NSWindow子类化并覆盖canBecomeMainWindow以始终返回YES,这解决了我的问题。

这也解释了为什么我的窗户可以调整大小,但调整大小的句柄从未出现过;只有主窗口才能调整大小句柄!