我正在做一个应用程序,其中包括在一段时间之后提出问题,并且用户不能再做任何事情,除非他回答问题,我已经设法通过设置一个来保持窗口总是在顶部9999级:
[_idleWindow setLevel:9999];
我想知道是否有办法避免在窗口打开时更改虚拟桌面,或者在更改虚拟桌面时再次关注窗口。
答案 0 :(得分:2)
查看setCollectionBehavior:
[_idleWindow setCollectionBehavior:NSWindowCollectionBehaviorMoveToActiveSpace|NSWindowCollectionBehaviorTransient|NSWindowCollectionBehaviorFullScreenDisallowsTiling|NSWindowCollectionBehaviorFullScreenAuxiliary];
可能会成功。
此外,如果您可以使用NSPanel而不是NSWindow,则可以添加样式掩码:NSWindowStyleMaskNonactivatingPanel
以便在您的应用未激活时提供窗口密钥状态。 (您需要在NSPanel子类中实现canBecomeKeyWindow
)
答案 1 :(得分:1)
经过对Google的一些研究后,我在另一个Stackoverflow post找到了解决方案。
解决方案:
You need to add this code either in your xib / storyboard, either in your NSWindowController subclass -windowDidLoad method, either in your designated initialiser of your NSWindow subclass :
- (void) awakeFromNib {
[self setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces]; //this was the one that worked for me
}
OR
- (id)initWithContentRect:(NSRect)contentRect
styleMask:(NSUInteger)styleMask
backing:(NSBackingStoreType)bufferingType
defer:(BOOL)flag {
if (self = [super initWithContentRect:contentRect styleMask:styleMask backing:bufferingType defer:flag]) {
[self setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces];
}
return self;
}
OR if you have a NSWindowController
- (void)windowDidLoad {
[super windowDidLoad];
[[self window] setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces];
}
OR Edit the nib file and add this behaviour to your window in XCode.