Я пытаюсь создать виртуальную клавиатуру в Objective-C/Cocoa/OS X. Клавиатурное окно представляет собой панель HUD. Как я могу сделать, чтобы панель не стала ключевой, если я нажимаю на клавиатуру?Сделать ключ NSPanel/NSWindow вручную или не стать ключом
Я уже пробовал следующий подход в - (void)windowDidBecomeKey:(NSNotification *)notification
-метода (которые получают называется), но он не работает:
NSDisableScreenUpdates();
[_window orderOut:self];
[_window orderFront:self]; // Not asking it to be key
NSEnableScreenUpdates();
И то же самое с nil
вместо self
. Есть идеи?
Edit 1: Я попытался установить свойство, как это и это работает, но разрушает HUD-стиль:
[_window setStyleMask:NSHUDWindowMask | NSNonactivatingPanelMask];
Если я делаю это HUD-стиль там еще раз, но и окно снова становится ключом:
[_window setStyleMask:NSHUDWindowMask | NSTitledWindowMask | NSNonactivatingPanelMask];
Edit 2: Теперь я также попытался подклассов и добавил следующий код KeyboardPane п.м.:
- (BOOL)canBecomeKeyWindow {
return NO;
}
Теперь NSLog(@"Can become key window: %hhd", _window.canBecomeKeyWindow)
возвращается 0
, но панель становится ключом, тем не менее ...
Трюк с NSNonactivatingPanelMask работает, но как я могу сохранить титульный HUD-стиль с помощью этого стиля-свойства? Это воссоздает название-HUD-стиль: setStyleMask: NSHUDWindowMask | NSTitledWindowMask | NSNonactivatingPanelMask , но затем он снова становится ключом ... –
Вы установили 'станетKeyOnlyIfNeeded'? –
Yap, но это, кажется, не имеет эффекта ... –