【问题标题】:How do I cede focus to the previous application in Cocoa?如何将焦点转移到 Cocoa 中的先前应用程序?
【发布时间】:2009-12-25 03:24:26
【问题描述】:

假设用户当前使用的是 Chrome。所以我有一个由全局热键调用的 HUD,然后用户在其中输入一些内容并单击关闭或确定,HUD 消失(仅使用 [NSPanel orderOut:])但我的应用程序仍然集中(即菜单我的应用程序栏仍然可见)。但我希望焦点回到原始应用程序 Chrome。我如何实现这样的目标?理想情况下,我也永远不会“获得”我的应用程序的焦点,因此,HUD 输入都会在 Chrome 仍然是焦点应用程序时发生。 Things.app 设法实现了这样的目标。 Quicksilver 也这样做。

【问题讨论】:

    标签: objective-c cocoa macos


    【解决方案1】:

    致电[NSApp hide:]

    这将隐藏您的应用程序并激活先前活动的应用程序。

    【讨论】:

    • 如果您的应用具有全屏窗口,则情况并非如此。
    【解决方案2】:

    为了永远不要将注意力集中在您的应用程序上,请在您的 NSPanel 上调用 [panel setStyleMask:[panel styleMask] | NSNonactivatingPanelMask]; 或在 Interface Builder 中选中您的 NSPanel 上的Non Activating复选框。

    【讨论】:

      【解决方案3】:

      您可以有一个不露面的助手应用程序为您执行此操作,或者在您被带入之前获取最前面的进程的 PSN,并在您想离开时切换回它。

      【讨论】:

        【解决方案4】:

        如果这是您的应用程序必须提供的唯一 UI,您可以给它一个 LSUIElementInfo.plist 键,以防止它在 Dock 中或成为活动应用程序。

        【讨论】:

        • 不,当您使用该应用程序时,我会显示一个不同的窗口。而且那个窗口的行为就像任何普通的应用程序窗口一样,所以我不能使用 LSUIElement。
        • 为什么不呢?这当然是你想要的。
        • 不,我想要我的应用程序的停靠图标。
        猜你喜欢
        • 1970-01-01
        • 2011-09-15
        • 1970-01-01
        • 2021-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多