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 в своем подклассе окна, если он не имеет границ.

Это было навсегда выяснить. (Я написал сообщение в блоге обо всем моем решении.)