2016-02-16 12 views
0

В моем приложении у меня есть окна, отображающие уведомления. Я создаю экземпляр контроллера из xib, и я вызываю makeKeyAndOrderFront, чтобы сделать окно видимым. Я также корректирую его уровень до NSScreenSaverWindowLevel, чтобы он появился перед другими.Другое окно выходит вперед, когда приносит окно на передний план

Проблема в том, что когда я нажимаю это окно, чтобы использовать ее, главное окно для моего приложения выходит на передний план. У меня также есть другие ОС, открытые моим приложением, и я заметил, что с ними происходит такое же поведение.

Согласно документации Apple на NSWindow, при открытии окна на передний план не следует изменять порядок других Windows, таким образом, меня путают.

ответ

0

Оказывается, проблема связана с this other question. Важная часть, о которой я не упоминал, заключается в том, что окна в моем приложении, которые выставили эту проблему, были без заголовка.

По умолчанию, когда у вас есть окно без заголовка, Cocoa не позволяет ему стать основным окном. Я подклассифицировал NSWindow и перегрузил canBecomeMainWindow, чтобы возвращать ДА в любое время, и это решило мою проблему.

Это также объясняет, почему мои окна были изменены, но ручки изменения размера никогда не появлялись сами по себе; только главные окна получают ручки изменения размера!

0

Альтернативы

Рассматривали ли вы с помощью NSAlert для отображения этих уведомлений?

Я не знаю, что вы хотите показать пользователю, но если это только уведомление, NSUserNotification - тоже хороший способ. Пользователь получает информацию, но не прерывается с того, что он делает.

+0

Уведомление представляет собой полномасштабный NSWindow с собственной функциональностью (в отличие от вызова Skype или FaceTime); Я не позволяю ему сфокусироваться на том, что делает пользователь в данный момент. – Aaron

+1

Вижу, позвольте мне взглянуть на это завтра! – mangerlahn