【问题标题】:Close an NSWindow without activating the window below关闭一个 NSWindow 而不激活下面的窗口
【发布时间】:2014-05-06 21:32:58
【问题描述】:

考虑以下场景。我有一个有两个窗口的应用程序:

  1. 包含应用所有功能的主窗口;
  2. 还有一个辅助窗口,可以使用全局快捷方式或单击应用程序的状态栏图标来调用。它看起来像这样: 这是一个简单的窗口,可以在不打开主窗口的情况下快速向应用程序添加数据——可能会改变空间并扰乱用户的工作流程。

    窗口漂浮在其他一切之上(位于NSModalPanelWindowLevel)并且可以加入所有空间(NSWindowCollectionBehaviorCanJoinAllSpaces

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

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

那么,如何在不激活下方窗口的情况下关闭 NSWindow?

我想不通。我唯一的想法是,也许你可以制作一个显示这个辅助窗口的辅助应用程序——但这听起来像很多工作(在进程之间来回发送数据,所有这些......)。一定有更简单的方法!

【问题讨论】:

    标签: objective-c macos cocoa nswindow appkit


    【解决方案1】:

    我不认为这可以(有用地)用 NSWindow 完成。
    this answer 一样,我建议尝试使用NSPanel 样式NSNonactivatingPanelMask 而不是创建NSWindow

    【讨论】:

    • 呃,我现在觉得自己好蠢!不知道我是怎么错过的。
    • (很抱歉之前没有将您的答案标记为正确。这是不对的。)
    猜你喜欢
    • 1970-01-01
    • 2011-05-27
    • 2021-08-06
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多