【问题标题】:How to bring NSWindow to front and to the current Space?如何将 NSWindow 带到前面和当前空间?
【发布时间】:2010-12-16 23:01:49
【问题描述】:

我正在使用这段代码来打开我的窗口:

[self.window makeKeyAndOrderFront:self];
[self.window setOrderedIndex:0];

但它通常会在其他窗口下方或显示在我上次打开它的其他 Space 桌面中。如何让它始终显示在用户“前面”?

更新 我从之前提出的问题中找到了答案;使窗口显示在其他窗口的顶部: [NSApp activateIgnoringOtherApps:YES];

但是如何将应用移动到用户的当前空间?

【问题讨论】:

    标签: swift cocoa


    【解决方案1】:

    要将您的应用放在首位:

    [NSApp activateIgnoringOtherApps:YES];
    

    斯威夫特:

    NSApp.activateIgnoringOtherApps(true)
    

    斯威夫特 3:

    NSApp.activate(ignoringOtherApps: true)
    

    【讨论】:

    • 谢谢!关于将应用程序带到用户当前空间的任何想法?
    【解决方案2】:

    也许你想要:

      [self.window setCollectionBehavior: NSWindowCollectionBehaviorCanJoinAllSpaces];
    

    尝试其他收集行为...我发现NSWindowCollectionBehaviorMoveToActiveSpace 在 10.5 中有点错误,但现在可能会更好。

    【讨论】:

    • 非常感谢。这正是我想要的。
    • 我如何在不问的情况下学习所有这些微妙的东西?有时我在可可之地感到非常迷失。
    • 我倾向于在每个新的操作系统版本发布时阅读所有发行说明。里面有很多很好的信息,而且只需要一两个小时。
    • 阅读更重要的编程指南和框架参考。从 Cocoa Fundamentals Guide 开始,然后继续前进。
    • 嘿@Gon!似乎我确实找到了解决方案(至少它为我完成了这项工作)。尝试使用[self setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces | NSWindowCollectionBehaviorTransient]; [self setLevel:NSPopUpMenuWindowLevel];
    【解决方案3】:

    但是如何将应用移动到用户的当前空间?

    你没有。空间包含窗口,而不是应用程序。 (这就是为什么 collectionBehavior 属性在 NSWindow 上,而不是在 NSApplication 上。)

    【讨论】:

    【解决方案4】:

    语法似乎与 Swift 2 有点不同:

    NSApplication.sharedApplication().activateIgnoringOtherApps(true)
    

    【讨论】:

    • NSApp 只返回 NSApplication.sharedApplication() 单例。
    【解决方案5】:

    Swift 2.0

    NSApp.activateIgnoringOtherApps(true)
    

    Helpful Programming Tips and Hacks

    【讨论】:

      【解决方案6】:

      斯威夫特 3.0

      NSApp.activate(ignoringOtherApps: true)
      

      【讨论】:

        【解决方案7】:

        斯威夫特 5.0 +

         NSWindow.orderFrontRegardless()
        

        【讨论】:

          【解决方案8】:

          如果你想让你的应用程序出现在最前面,即使它的最小化并且已经激活(给定了活动焦点),那么使用这两个:

                      NSApp.activate(ignoringOtherApps: true)
                      NSApp.windows.first?.orderFrontRegardless()
          

          如果你只想把它带到前面,而不给它焦点,只需使用:

                      NSApp.windows.first?.orderFrontRegardless()
          

          【讨论】:

            猜你喜欢
            • 2015-08-04
            • 2010-09-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多