切换空间时保持窗口在顶部

时间:2011-02-20 21:55:54

标签: macos cocoa mission-control

我使用-[NSWindow setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces].创建了一个窗口 它只能实现我想要的一半:当我切换空格时,窗口也会切换空格(如预期的那样),但是我的窗口移动到该空间中所有其他窗口后面的后面。这特别糟糕,因为我的应用程序处于活动状态,但其窗口低于所有其他应用程序的窗口。我尝试将级别更改为NSFloatingWindowLevel,这确实保持在顶部,但是当切换空格时它会丢失键状态(焦点)。

我尝试NSWindowCollectionBehaviorMoveToActiveSpace收集行为,但绝对不是我想要的。

有希望吗?我知道几乎没有与Spaces相关的其他API。

2 个答案:

答案 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()
}
相关问题