Я реализую дочернее окно результатов поиска без полей, которое всплывает под NSSearchField и отображает результаты поиска в виде пользовательских типов. NSWindow не обязательно должно быть ключевым, поскольку NSSearchField перенаправляет соответствующие команды (стрелка вверх, стрелка вниз, клавиша ввода) в пользовательское представление результатов поиска в окне, которое позволяет пользователю перемещаться по результатам в любое время во время поиска. Все это прекрасно работает, за исключением одного случая использования: я хочу легко закрыть окно, когда пользователь нажимает в любом месте приложения.
Обычно я делаю это в уведомлении windowDidResignKey
, но в этом случае оно не будет отправлено, поскольку окно никогда не является ключевым. Есть ли другой способ легко справиться с этой ситуацией?
- Редактировать с решением -
Используя вариант идеи Роба ниже, я просто реализовал controlTextDidEndEditing:
, метод делегата NSSearchField, который вызывается (среди прочего), когда поле поиска теряет фокус. Если поле поиска не является первым респондентом моего главного родительского окна, я закрываю окно результатов поиска.