Как легко закрыть NSWindow, которое не является ключевым? - PullRequest
1 голос
/ 10 марта 2012

Я реализую дочернее окно результатов поиска без полей, которое всплывает под NSSearchField и отображает результаты поиска в виде пользовательских типов. NSWindow не обязательно должно быть ключевым, поскольку NSSearchField перенаправляет соответствующие команды (стрелка вверх, стрелка вниз, клавиша ввода) в пользовательское представление результатов поиска в окне, которое позволяет пользователю перемещаться по результатам в любое время во время поиска. Все это прекрасно работает, за исключением одного случая использования: я хочу легко закрыть окно, когда пользователь нажимает в любом месте приложения.

Обычно я делаю это в уведомлении windowDidResignKey, но в этом случае оно не будет отправлено, поскольку окно никогда не является ключевым. Есть ли другой способ легко справиться с этой ситуацией?

- Редактировать с решением -

Используя вариант идеи Роба ниже, я просто реализовал controlTextDidEndEditing:, метод делегата NSSearchField, который вызывается (среди прочего), когда поле поиска теряет фокус. Если поле поиска не является первым респондентом моего главного родительского окна, я закрываю окно результатов поиска.

1 Ответ

1 голос
/ 10 марта 2012

Вы можете создать подкласс NSWindow и переопределить makeFirstResponder:, чтобы при каждом изменении первого респондента окно результатов закрывалось, если оно открыто.Первый респондент не должен меняться, пока ваше поле поиска активно, поэтому окно следует закрывать только тогда, когда редактор поля поиска теряет фокус.

...