如何将 NSWindow 带到前面和当前空间?

Posted

技术标签:

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

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

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

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

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

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

【问题讨论】:

【参考方案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 上。)

【讨论】:

NSWindow 有一个名为 FloatingPanel 的子类,可以放在空格上。 gist.github.com/jordibruin/8ae7b79a1c0ce2c355139f29990d5702 self.collectionBehavior.insert(.fullScreenAuxiliary) self.collectionBehavior.insert(.canJoinAllSpaces)【参考方案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()

【讨论】:

以上是关于如何将 NSWindow 带到前面和当前空间?的主要内容,如果未能解决你的问题,请参考以下文章

JavaFX 如何将对话框/警报带到屏幕前面

如何将窗户带到前面?

NSWindow 在每个应用程序的前面和菜单栏的前面 Objective-c Mac

如何将停靠在选项卡中的 CDockablePane 带到前面

如何将 SKSpriteNode 放在前面?

如何设置div以将空间带到容器的末尾?