нажатие клавиши «Backspace» один раз удаляет все в панели пользователя - PullRequest
0 голосов
/ 09 ноября 2010

Здравствуйте, у меня очень странная ошибка: в элементе управления 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 для панели поиска автозаполнения, чтобы пользователю не приходилось нажимать на нее снова после ввода первой буквы. Но это также приводит к тому, что в строке поиска автозаполнения удаляются все символы. Интересно, есть ли способ обнаружить символ возврата. Это решило бы мои проблемы.

1 Ответ

0 голосов
/ 10 ноября 2010

Я решил использовать 2 объекта UISearchDisplayController.Когда пользователь начинает поиск в методе searchBarShouldBeginEditing, я создаю контроллер отображения поиска, а затем в searchDisplayControllerDidEndSearch я освобождаю контроллер отображения поиска.Это немного упрощенная версия. Я также использую анимацию, чтобы переместить вторую строку поиска в верхнюю часть окна, прежде чем активировать для него контроллер отображения поиска.

...