我使用-[NSWindow setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces].
创建了一个窗口
它只能实现我想要的一半:当我切换空格时,窗口也会切换空格(如预期的那样),但是我的窗口移动到该空间中所有其他窗口后面的后面。这特别糟糕,因为我的应用程序处于活动状态,但其窗口低于所有其他应用程序的窗口。我尝试将级别更改为NSFloatingWindowLevel,这确实保持在顶部,但是当切换空格时它会丢失键状态(焦点)。
我尝试NSWindowCollectionBehaviorMoveToActiveSpace
收集行为,但绝对不是我想要的。
有希望吗?我知道几乎没有与Spaces相关的其他API。
答案 0 :(得分:2)
太空是一种痛苦。我的解决方案是注册更改通知,如下所示:
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
selector:@selector(activeSpaceDidChange:)
name:NSWorkspaceActiveSpaceDidChangeNotification
object:nil];
然后在我的WindowController
课程中:
- (void) activeSpaceDidChange:(NSNotification *)aNotification {
if ([NSApp isActive]) [[self window] orderFront:self];
}
答案 1 :(得分:0)
Swift 5@francis-mcgrew 答案的解决方案 ⤵︎
// Quick Solution: Place this in the AppDelegate in applicationDidFinishLaunching
NSWorkspace.shared.notificationCenter.addObserver(
self,
selector: #selector(notifySpaceChanged),
name: NSWorkspace.activeSpaceDidChangeNotification,
object: nil
)
// and this in the same class
@objc func notifySpaceChanged() {
window.orderFrontRegardless()
}