2016-11-30 3 views
1

Я делаю приложение, которое состоит из задавать вопрос через определенное время, и пользователь не может ничего сделать, если он не отвечает на вопрос, я «ве удалось его поддерживать окно всегда на высоте, установив 9999 уровень:Установить фокус NSWindow сверху, даже если смена виртуального стола

[_idleWindow setLevel:9999]; 

Я хотел бы знать, если есть способ, чтобы избежать изменения виртуального рабочего стола, когда окно открыто, или снова фокусировать окно при изменении виртуального рабочего стола.

ответ

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. 

Кредиты: Stefan Szekeres

2

Посмотрите на setCollectionBehavior:

[_idleWindow setCollectionBehavior:NSWindowCollectionBehaviorMoveToActiveSpace|NSWindowCollectionBehaviorTransient|NSWindowCollectionBehaviorFullScreenDisallowsTiling|NSWindowCollectionBehaviorFullScreenAuxiliary]; 

может сделать трюк.

Кроме того, если вы можете использовать NSPanel вместо NSWindow, вы можете добавить маску стиля: NSWindowStyleMaskNonactivatingPanel, чтобы дать статус вашего окна, даже если ваше приложение неактивно. (вам необходимо реализовать canBecomeKeyWindow в подклассе NSPanel)

+0

я просто не было времени, чтобы проверить ваше решение и оно не работает, будет испытывать NSPanel –

Смежные вопросы