Здравствуйте, у меня очень странная ошибка: в элементе управления UISearchBar
, если я нажимаю клавишу возврата на клавиатуре, НЕ серый X в текстовом поле, а клавишу на экранной клавиатуре, он удаляет каждый символ один за другим. Как будто я нажимал клавишу несколько раз, пока текстовое поле не очистилось, но я нажал ее только один раз.
подробности:
Я предполагаю, что проблема заключается в следующих двух методах, но я не уверен.
В представлении у меня есть 2 объекта uisearchbar. В контроллере вида, который является UISearchBarDelegate
, у меня есть метод textDidChange
:
- (void) searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
// called when text changes (including clear)
{
[searchBar resignFirstResponder];
debugLog(@"SearchViewController textDidChange");
AutoCompleteViewController *acvc = [[AutoCompleteViewController alloc] initWithNibName: @"AutoCompleteViewController" bundle: [NSBundle mainBundle]];
acvc.searchBar = searchBar;
acvc.datasource = self;
[self presentModalViewController: acvc animated:TRUE];
[acvc release];
}
У класса AutoCompleteViewController
есть еще UISearchBar
и UITableView
. Этот класс также реализует UISearchBarDelegate
и в своем textDidChange просит делегата получить список строк для текста, введенного в UISearchBar
.
- (void) searchBar:(UISearchBar *) _searchBar textDidChange:(NSString *)searchText
{
debugLog(@"AutoCompleteViewController textDidChange");
if (shouldReloadResults)
{
[autoCompleteValues release];
autoCompleteValues = [datasource valuesForSearchString:self : _searchBar.text];
[autoCompleteValues retain];
[acResultsTable reloadData];
}
}
Так что, если я нахожусь на главном экране и выбираю строку поиска и нажимаю клавишу Backspace один раз, она удаляет первую букву, показывает представление автозаполнения, а затем начинает удалять все остальные символы, также показывая результаты автозаполнения для каждого из них. До тех пор, пока панель поиска не станет пустой. И я просто нажал клавишу Backspace один раз. У меня также есть другие методы, но я думаю, что они актуальны, но я понятия не имею, что не так. Если я уже в AutoCompleteViewController
и затем нажимаю клавишу Backspace, он работает правильно.
ОБНОВЛЕНИЕ: До сих пор я выяснил, что вызов resignFirstResponder
и becomeFirstResponder
вызывает такое странное поведение. Проблема в том, что я установил becomeFirstResponder
для панели поиска автозаполнения, чтобы пользователю не приходилось нажимать на нее снова после ввода первой буквы. Но это также приводит к тому, что в строке поиска автозаполнения удаляются все символы. Интересно, есть ли способ обнаружить символ возврата. Это решило бы мои проблемы.