2015-12-03 5 views
0

У меня есть NSSearchField в NSPopover. Этот popover открывается при щелчке элемента NSStatusBar.Force NSSearchField начинает редактирование, когда он становится первым ответчиком

В моем контроллере NSPopover viewWillAppear() я вызываю self.view.window?.makeFirstResponder(searchField) на свой NSSearchField. Я хочу, чтобы это поле поиска было готово для редактирования при представлении popover. Подготовившись к редактированию, я имею в виду, что пользователю не нужно щелкнуть внутри NSSearchField, чтобы начать печатать.

На данный момент моя реализация не всегда работает. Иногда он функционирует, и popover открывается, когда поле поиска готово, курсор мигает. Однако большую часть времени, особенно если я редактирую текст в другом приложении, когда открываю popover, необходимо щелкнуть NSSearchField для редактирования.

Я подклассифицировал поле поиска и переопределил его метод becomeFirstResponder(), и я могу подтвердить, что он вызывается каждый раз.

Почему я не могу «украсть» право редактировать поле поиска из других приложений, когда поле становится первым ответчиком? Возможно ли это?

+1

Возможно, но не рекомендуется; кража фокуса от другого приложения по существу будет похожа на вредоносное ПО. –

+0

Я вижу вашу точку зрения. При этом некоторые приложения делают это: если вы вводите текстовое поле и открываете приложение «Сообщения», NSTextField, в котором вы вводите сообщения, автоматически редактируется. Может быть, это поведение доступно только Apple? – elliottbolzan

+0

Обычно это вспомогательный инструмент для приложения, которое будет установлено, а затем предоставлено разрешение для такого поведения; не только для приложений Apple. –

ответ

0

Оказывается, ключ приносил мое заявление на первый план.

Я смог передать свое приложение в фокус системы, позвонив по телефону NSApplication.sharedApplication().activateIgnoringOtherApps(true). Мой NSSearchField, который уже стал первым ответчиком, теперь может быть непосредственно отредактирован.

0

Вы должны использовать viewDidAppear:, чтобы сделать поле поиска первым ответчиком.

Обычно вид еще не в иерархии представлений, когда viewWillAppear: называется, поэтому window свойство nil (и ваше факультативное сцепление просто не называть makeFirstResponder).

+0

Это имеет смысл, но, к сожалению, он почему-то не решает его. В обоих случаях, я вызываю это из viewWillAppear: или viewDidAppear :, NSSearchField определенно получает вызов. Кроме того, если я проверю первый ответчик окна после вызова, это NSSearchField. – elliottbolzan

 Смежные вопросы

  • Нет связанных вопросов^_^