ラベルとテキストボックスのオーバーレイを時々表示するアプリを作成しました。それはうまく機能しますが、他のアプリがフルスクリーンモードでアクティブであっても機能する必要があります.
オーバーレイについては、カスタム ウィンドウ クラスとオーバーライドさcanBecomeKeyWindow
れたメソッドを作成して、ボーダレス ウィンドウをキー ウィンドウにできるようにしました (単純に を返しますYES
)。
動作しますが、たとえば Minecraft を実行してから全画面表示にすると、オーバーレイがそれをオーバーライドできます。しかし、オーバーレイに NSTextField を入力できません。修正方法は?
次のようなオーバーレイを作成しています。
[[NSWorkspace sharedWorkspace] hideOtherApplications];
NSRect frame = [[NSScreen mainScreen] frame];
_fadedWindow = [[CustonWindow alloc] initWithContentRect:frame
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO];
[_fadedWindow setAcceptsMouseMovedEvents:YES];
[_fadedWindow setOpaque:NO];
[_fadedWindow setLevel:CGShieldingWindowLevel()];
[_fadedWindow setBackgroundColor:[NSColor colorWithDeviceRed:0.0 green:0.0 blue:0.0 alpha:0.8]];
NSApplicationPresentationOptions options = NSApplicationPresentationDisableProcessSwitching + NSApplicationPresentationHideDock + NSApplicationPresentationDisableForceQuit + NSApplicationPresentationDisableSessionTermination + NSApplicationPresentationDisableHideApplication;
[NSApp setPresentationOptions:options];
_fadedWindow.alphaValue = 0;
[_fadedWindow orderFrontRegardless];
[[_fadedWindow animator] setAlphaValue:1];
[_fadedWindow toggleFullScreen:self];
[_fadedWindow makeKeyAndOrderFront:self];
[NSApp activateIgnoringOtherApps:YES];
[_fadedWindow orderFront:self];
それでも、オーバーレイの NSTextField にキーボード入力を入力できないようです。