Плавающее NSWindow крадет фокус

#objective-c #swift #nswindow #floating #spotlight

#objective-c #swift #nswindow #плавающий #прожектор

Вопрос:

Я пытаюсь создать приложение с такими функциями, как поиск spotlight, который был продемонстрирован на WWDC.

Мне удалось перевести его на плавающий уровень с kCGFloatingWindowLevelKey помощью, однако окно крадет фокус из любого окна, которое ранее было активным. Я бы хотел, чтобы он сохранял фокус и по-прежнему принимал ввод в текстовое поле от пользователя. Это выполнимо?

Ответы в swift предпочтительнее, но objective-c также работает.

Комментарии:

1. Это определенно возможно, но я не уверен, как. Spotlight может быть не окном, а, вероятно NSMenu , с пользовательским элементом управления внутри.

2. Я только что попытался создать NSMenu с пунктом меню и пользовательским представлением. Но как только ему присваивается фокус клавиатуры, другие окна теряют свое «основное» состояние окна и становятся «неактивными» ( developer.apple.com/library/mac/Documentation/Cocoa/Conceptual /… ). Я понятия не имею, что попробовать дальше.

3. В mavericks и раньше я бы сказал, что вы на месте. Однако я имею в виду демонстрацию из WWDC spotlight в 10.10 Yosemite. appleinsider.com/articles/14/06/05 /…

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

5. Я полагаю, вам нужен NSPanel with NSNonactivatingPanelMask в его маске стиля.