objective-c - 如何强制 NSWindow 出现在每个应用程序的前面?甚至全屏应用程序

标签 objective-c xcode macos cocoa nswindow

我有一个 NSWindow,我想将它放在所有内容(计算机的每个应用程序、全屏应用程序等)的前面。即使我点击后台应用程序,NSWindow 也无法进入后台。并且 NSWindow 必须跟随用户屏幕,例如,如果用户将桌面切换到 desktop2,等等...... 我该怎么做?
谢谢!

最佳答案

如果您不需要在其他应用的全屏窗口中可见,这并不太难。

首先,为了保持领先地位,只需设置级别:使用 NSFloatingWindowLevel 或更高级别。尝试不同的值,看看哪个适合您的需求。

接下来,即使用户更改了 Spaces(可能包括 Exposé/Mission Control、setCollectionBehavior:使用适当的标志对)也能保持领先,或者如果您正在创建 Nib 中的窗口。可以加入所有空间或移动到事件空间将确保您以略有不同的方式在每个空间中保持可见。您可能希望将 Exposé 设置为 Stationary 或 Transient。再一次,两种方法都试试看。

但是,当用户切换到全屏空间或仪表板或启动板时,Lion 将隐藏所有空间和移动到事件空间窗口。如果你观察,你会发现它对三种情况中的每一种都以不同的方式做到这一点。 Snow Leopard 和 Mountain Lion 的做法略有不同。

如果你想解决最后一个问题,你需要一些 hackery 和针对每种情况和每个操作系统版本的不同形式的 hackery。基本技巧是捕捉与隐藏相关的通知并在适当的时候取消隐藏。

关于objective-c - 如何强制 NSWindow 出现在每个应用程序的前面?甚至全屏应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10905045/

相关文章:

ios - 如何使用 Xcode 在 Swift 中按 UI 元素类型进行应用程序范围/更快的更新......?

Python - OS X 中的屏幕抓取和控制鼠标

java - 在 macOS BigSur 中更改 Java 版本

objective-c - 来自国家名称的坐标/区域

objective-c - 是否可以将 `NSTextfield` 仅绑定(bind)到 NSArray 或 NSSet/Relationship 中的一个特定条目

ios - iOS 应用程序可以动态扩展到的大小限制?

objective-c - GCDAsyncSocket无法接收所有传输的数据,缺少最后一个 “Chunk”

iphone - Xcode 错误实例方法 -addAttachment withImageNamed 未找到

ios - 图像是由 UIImagePickerControllerSourceTypeCamera 拍摄的如何将其保存在 ios 的数据库中

objective-c - 了解应用程序在 cocoa mac OSX 中是否处于非事件状态的最佳方法?