Вам нужно будет вызвать complete:
в текстовом поле редактор полей в какой-то момент. Это то, что вызывает меню завершения, но оно не вызывается автоматически. Если у вас нет F5, связанного с чем-либо, попробуйте ввести свое поле и нажмите его. Завершение должно вызвать тогда; Option-Esc также может работать.
Если вы хотите авто завершение, это займет некоторую работу. Вы можете начать с чего-то вроде этого:
- (void)controlTextDidChange:(NSNotification *)note {
if( amDoingAutoComplete ){
return;
} else {
amDoingAutoComplete = YES;
[[[note userInfo] objectForKey:@"NSFieldEditor"] complete:nil];
}
}
Необходим какой-то тип флага, потому что запуск завершения завершит повторную публикацию NSControlTextDidChangeNotification
, что вызывает его вызов, запуск завершения, который изменяет контрольный текст, который ...
Очевидно, вам нужно будет сбросить флаг в какой-то момент. Это будет зависеть от того, как вы хотите обрабатывать взаимодействие пользователя с автозаполнением - вероятно, будет только одно завершение для заданной начальной строки, или пользователю нужно будет продолжать печатать, чтобы сузить возможности (в этом случае вам понадобится снова вызвать автозаполнение)?
Простой флаг тоже не вполне может это сделать; кажется, что, хотя уведомление повторно публикуется, редактор поля string
не изменился - он будет изменяться только в ответ на прямой ввод с клавиатуры. В моей реализации автозаполнения я обнаружил, что мне нужно сохранить копию «последней напечатанной строки» и сравнивать ее каждый раз с содержимым редактора полей.