【问题标题】:Cocoa - changing spaces spontaneouslyCocoa - 自发地改变空间
【发布时间】:2016-07-30 09:27:30
【问题描述】:

我编写了一个作为后台应用程序运行的项目,但我遇到了这个小问题。

假设我的 Mac 上有 3 个打开的桌面(空间):

  1. 从我的项目中打开 NSWindow 的空间
  2. 没有打开文件夹应用的空白空间
  3. 例如打开文件夹的空间

我目前在 1 号空间。

我向左滑动 3 根手指切换到空白空间,然后再次切换到打开文件夹的空间(立即获得焦点)。

然后我向右滑动 3 个手指以从第三个空格切换到第二个空格,发生的事情是它(IMO)知道,没有一个 NSWindow 可以关注,所以它切换到第一个空格(没有我甚至触摸触摸板),我的应用程序中的 NSWindow 现在已聚焦。

我的问题是 - 如何防止这种情况发生?我的意思是,我不记得故意设置这样的东西(我的应用程序基于获取当前的焦点 NSWindow,但只有当用户点击窗口)。

【问题讨论】:

    标签: macos cocoa nswindow


    【解决方案1】:

    我怀疑当您第一次切换到空间 2 时,您的应用被认为仍然处于活动状态。然后,当您从空间 3 切换回空间 2 时,您的应用被重新激活(因为它是该空间上的最后一个活动),这使得您的应用程序的窗口主/键窗口,默认行为是当它成为主/键时切换到窗口的空间。

    您可以通过“系统偏好设置”>“任务控制”>“切换到应用程序”来更改系统行为> 切换到应用程序时,切换到为该应用程序打开窗口的空间。

    您可以通过将窗口的 collectionBehavior 属性设置为包含 NSWindowCollectionBehaviorMoveToActiveSpace 来更改应用的行为,尽管这会导致应用的窗口移动到空间 2。这也可以在 IB 中使用属性检查器进行设置。

    【讨论】:

    • 感谢 Ken,但有没有办法以编程方式防止这种情况发生,而无需将我的应用程序窗口移动到活动空间?我觉得这很奇怪,因为其他应用的行为不一样。
    • 当您第一次切换到空间 2 时,您的应用是否仍然处于活动状态?你可以通过菜单栏来判断。另外,你能用一个新的、简单的 Cocoa 项目重现这个吗?如果一个新项目不能重现它,那么您需要检查您对您的项目所做的工作使其与众不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 2012-09-22
    • 2015-11-17
    • 1970-01-01
    相关资源
    最近更新 更多