NSWindow makeKeyAndOrderFront создает окно, но не Key или Front
makeKeyAndOrderFront
не делает мой ключ NSWindow или передний.
В моем приложении нет главного окна или меню, которые могут быть частью проблемы?
IBOutlet NSWindow *loginWindow;
//(connected in Interface Builder to the NSWindow)
NSWindow имеет "видимый при запуске" и "освобождение при закрытии", оба сняты.
Тогда:
- (void) applicationDidFinishLaunching:(NSNotification *)aNotification
{
[loginWindow makeKeyAndOrderFront:self];
}
Это откроет окно. (комментирование результатов приводит к тому, что окно не открывается).
Однако:
-
Он появляется за окном Xcode (не спереди).
-
Кажется, он получает фокус мыши, но не принимает нажатия клавиш в текстовых полях, содержащихся в окне. Ключи отправляются на Xcode.
-
Он появляется в сетке Expose при активации Expose. Но я не могу щелкнуть по окну, чтобы выбрать его в Expose... он не выйдет на передний план.
Почему мое окно не работает?
Ответы
Ответ 1
Удар в темноте: у вас есть LSBackgroundOnly
, установленный в вашем Info.plist. Что делает это не так: приложение на фоне только не может выйти на передний план, поэтому ваше окно не выходит на передний план.
Если вы хотите, чтобы ваше приложение не отображалось в Dock, установите LSUIElement
. Это подавляет ваше приложение Dock tile и не позволяет отображать его собственное главное меню в строке меню, но сохраняет свою способность приносить окно вперед и делать его ключом.
Ответ 2
Попробуйте вызвать этот метод [NSApp activateIgnoringOtherApps:YES];
. Это должно сделать его активным приложением.
Ответ 3
Оба этих ответа верны. Вам также необходимо убедиться, что вы переопределяете canBecomeKey
в своем подклассе окна, если он не имеет границ.
Это было навсегда выяснить. (Я написал сообщение в блоге обо всем моем решении.)