Objective-C NSWindow удалить окно из ключа - PullRequest
0 голосов
/ 05 февраля 2011

Привет, нужна небольшая помощь, у меня есть окно, которое всегда отображается в верхнем правом углу, но оно не всегда настроено на нажатие клавиши.В окне есть несколько кнопок, и когда нажата кнопка, окно становится ключевым, но я хочу, чтобы при нажатии кнопки я хотел, чтобы окно само по себе стало ключевым.

Так что в идеале окно становится ключом при нажатии кнопки, и в методе, который вызывает кнопка, я хочу написать инструкцию, которая затем выполнит действие кнопки и удалит окно из ключа.

Однако окно объявляется под делегатом приложения, а метод, связанный с кнопкой, объявляется в отдельном заголовочном файле.

У любого есть идеи, как это сделать, любая помощь будет принята с благодарностью.Заранее спасибо, Сами.

1 Ответ

1 голос
/ 05 февраля 2011

Существует несколько решений в зависимости от архитектуры вашего приложения.

  1. Отправить [[NSApp mainWindow] makeKeyWindow], в результате чего главное окно станет ключевым.

  2. Ваш делегат приложения может иметь ссылку на главное окно.В методе действия, который обрабатывает нажатие кнопки, вы можете попросить делегата приложения сделать главное окно ключевым.Делегат приложения отправит [mainWindow makeKeyWindow].

  3. Ваш делегат приложения может иметь ссылку на контроллер окна, который управляет главным окном.В методе действия, который обрабатывает нажатие кнопки, вы можете попросить делегата приложения сделать главное окно ключевым.Делегат приложения может попросить контроллер главного окна сделать это, и контроллер главного окна отправит [[self window] makeKeyWindow].

  4. Ваш делегат приложения может прослушать уведомление NSWindowDidResignKeyNotification и сохранитьссылка на последнее окно, которое ушло, будучи ключевым.В методе действия, который обрабатывает нажатие кнопки, вы можете попросить делегата приложения вернуть статус ключа в это предыдущее окно.Делегат приложения должен будет игнорировать уведомления NSWindowDidResignKeyNotification, когда окно является вашим вспомогательным окном.Это решение лучше, когда нет единого главного окна.

Если первое решение неприменимо, a) ваш делегат приложения может соответствовать протоколу, который объявляет метод, ответственный за восстановление статуса ключа.в соответствующее окно, или b) ваш метод действия может опубликовать уведомление, информирующее приложение о том, что ваш метод действия завершен, и попросить делегата приложения прослушать это уведомление и восстановить статус ключа в соответствующем окне.

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

...