2016-11-30 4 views
1

質問に答えるまで、特定の時間の後に質問をするアプリケーションをやっていて、ユーザーは何もできません。バーチャルデスクを変更してもNSWindowのフォーカスを上に設定

[_idleWindow setLevel:9999]; 

は、私は窓が開いているときに仮想デスクトップを変えないようにする方法があるかどうかを知りたい、またはウィンドウを再度焦点を当てる:9999レベルを設定することで、上に常にウィンドウをmantainするために管理」VEの仮想デスクトップを変更したときに表示されます。 setCollectionBehaviorで

答えて

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

ルック:

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

はトリックを行う可能性があります。

NSWindowの代わりにNSPanelを使用できる場合は、スタイルマスクを追加して、NSWindowStyleMaskNonactivatingPanelを追加して、アプリがアクティブでなくてもウィンドウのキーステータスを表示できます。 (canBecomeKeyWindowをNSPanelサブクラスに実装する必要があります)

+0

私はちょうどあなたのソリューションをテストする時間を持っていたし、それが動作しませんが、NSPanelをテストします –

関連する問題