Я использую NSControlTextEditingDelegate для автоматического завершения того, что введено в NSSearchField, с помощью генерируемых мной пользовательских предложений. complete:
сообщение отправляется в редактор полей при изменении текста.
Теперь я хотел бы точно настроить поведение автозаполнения и заставить его работать точно так же, как текстовое поле поиска Google работает в Safari:
Когда два или более слова (разделенные пробелами) вводятся в NSTextField, расположение для NSRange, переданное в
control:textView:textView:completions:forPartialWordRange: indexOfSelectedItem:
, начинается после последнего введенного пробела.Это означает, что если пользователь вводит «Сан-Франциско», а API Google возвращает «Сан-Франциско», при выборе его из списка автозаполнения значение NSTextField заменяется на «Сан-Сан-Франциско».
Возможный обходной путь состоит в перестроении NSArray, содержащем завершение и возвращающем только суффикс фактических предложений, в зависимости от charRange.location. Это выглядит паршиво (поскольку список автодополнения теперь показывает только часть строки завершения), поэтому я хочу, чтобы
NSTextField
игнорировались пробелы при запросе автозавершения.При выборе автодополнения из списка действие NSSearchField по умолчанию не отправляется. На данный момент пользователю нужно выбрать автозаполнение, а затем нажать клавишу ввода, чтобы запустить поиск.