关闭NSWindow而不激活下面的窗口

时间:2014-03-27 17:58:57

标签: objective-c macos cocoa nswindow appkit

请考虑以下情形。我有一个带有两个窗口的应用程序:

  1. 主窗口,其中包含应用程序的所有功能;
  2. 以及可以使用全局快捷方式或单击应用程序的状态栏图标调用的辅助窗口。它看起来像这样:enter image description here 它是一个简单的窗口,用于快速向应用程序添加数据,而无需启动主窗口 - 可能会更改空间并破坏用户的工作流程。

    窗口漂浮在其他所有内容之上(它位于NSModalPanelWindowLevel上)并且可以加入所有空格(NSWindowCollectionBehaviorCanJoinAllSpaces

  3. 问题在于:当快速添加窗口被排除时(按下X按钮或Esc),主窗口被设为按键并在前面排序(前提是它位于当前空间中的窗口列表。)

    这不是我想要的行为。通常,当应用程序的窗口关闭时,是的,您希望下面的应用程序窗口被激活,但不是在这里 - 这是一个"帮助"窗口应该或多或少独立于应用程序本身。当我在Safari中调用快速添加窗口时,我只想添加一些数据,单击Return,我希望它消失 - 我希望前一个窗口(Safari)是关键的,在顶部,不是我的应用程序的主窗口(除非我的应用程序的主窗口在调用快速添加之前是关键)。

    那么,如何关闭NSWindow而不激活下面的窗口?

    我无法解决这个问题。我唯一的想法是,也许你可以创建一个帮助应用程序来显示这个辅助窗口 - 但这听起来像很多的工作(在进程之间来回发送数据,所有......)。必须有一个更简单的方法!

1 个答案:

答案 0 :(得分:4)

我认为这可以(有用)用NSWindow来完成 与this answer中一样,我建议您尝试使用样式为NSPanel的{​​{1}},而不是创建NSNonactivatingPanelMask