2014-11-05 2 views
0

Я хочу использовать UIMenuController для отображения параметров автозаполнения для текстового поля на основе данных, которые у меня уже есть в приложении. Код для обновления пунктов меню и заполнения текстового поля, когда он выбран, отлично работает, но я не могу найти способ сохранить видимость элемента управления меню во время ввода. Я пробовалдержать UIMenuController видимым при вводе

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
     [[UIMenuController sharedMenuController] setMenuVisible:YES animated:YES]; 
    return YES; 
} 

но это ничего не делает. Если я положу код для обновления пунктов меню до того, как код будет отображаться в меню, я просто закончу замену первой буквы в текстовом поле снова и снова, и меню все еще не отображается.

Возможно, настоящая проблема заключается в том, что UIMenuController автоматически выбирает последнее слово в текстовом поле, когда оно отображается, но я также не нашел для этого исправления.

ответ

0

Я пытался выяснить способ сделать то же самое. Если предположить, что ваш код отображает UIMenuController, делая вид первый ответчик, добавить немного коды, который делает меню видимым внутри операционного блока:

[[NSOperationQueue mainQueue] addOperationWithBlock:^{ [[UIMenuController sharedMenuController] setMenuVisible:YES animated:YES]; }];

Это отображает меню и текст, введенный в текстовом поле. Но недостатком является то, что текстовое поле больше не является первым ответчиком. Поэтому пользователю нужно снова нажать на текстовое поле, чтобы ввести новый символ. Это не очень удобно.

Другой вариант для автозавершения использует UITableView вместо UIMenuController, как здесь: http://www.raywenderlich.com/336/auto-complete-tutorial-for-ios-how-to-auto-complete-with-custom-values

Но UIMenuController чище. Я пробовал много подходов, чтобы сделать UIMenuController моим победителем, но я не смог оптимизировать этот подход. Если вы нашли решение, сообщите мне.

+0

В итоге я перешел на другой маршрут, который занимает меньше недвижимости и действительно выглядит действительно замечательно. Проверьте [это текстовое поле автозаполнения] (https://github.com/hoteltonight/HTAutocompleteTextField), отправленный Джоном Сибли в HotelTonight. – codemolly

+0

Да, альтернативы UIMenuController более привлекательны. –