UISearchDisplayContoller - не может предотвратить перезагрузку таблицы при вводе в строку поиска

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

Похоже, что для настройки контроллера дисплея поиска для асинхронного режима вам действительно нужно сделать две вещи:

  1. вернуть NO для m пытается настроить контроллер отображения поиска для обработки асинхронных результатов от веб-службы. У меня есть основные элементы, но я столкнулся с действительно странной проблемой, которую я не могу понять. Кажется ...

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

    Похоже, что для настройки контроллера дисплея поиска для асинхронного режима вам действительно нужно сделать две вещи:

    1. вернуть NO для m пытается настроить контроллер отображения поиска для обработки асинхронных результатов от веб-службы. У меня есть основные элементы, но я столкнулся с действительно странной проблемой, которую я не могу понять. Кажется ...

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

      Похоже, что для настройки контроллера дисплея поиска для асинхронного режима вам действительно нужно сделать две вещи:

      1. вернуть NO для У меня есть основные элементы, но я столкнулся с действительно странной проблемой, которую я не могу понять.

        Похоже, что для настройки контроллера дисплея поиска для асинхронного режима вам действительно нужно сделать две вещи:

        1. вернуть NO для У меня есть основные элементы, но я столкнулся с действительно странной проблемой, которую я не могу понять.

          Похоже, что для настройки контроллера дисплея поиска для асинхронного режима вам действительно нужно сделать две вещи:

          1. вернуть NO для searchDisplayController: shouldReloadTableForSearchString, и
          2. обрабатывают searchBarSearchButtonClicked и запустить перезагрузку стола

          Я делаю и то, и другое, но вижу, что контроллер отображения поиска перезагружает таблицу по первому символу, набранному в строке поиска, хотя я возвращаю НЕТ согласно №1. Он не перезагружается при вводе последующих символов.

          Итак, мой вопрос: как мне предотвратить попытки контроллера отображения поиска перезагрузить таблицу, пока пользователь печатает? (в частности, для первого введенного символа)

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

          Вот небольшой фрагмент моего кода, чтобы показать проблему. Когда я запускаю это и набираю "abcde" в строке поиска, после того, как я наберу «a», результаты будут отображаться как «a # 0», «a # 2» и т. д. Они не обновятся снова, пока я не нажму кнопку поиска, тогда вы увидите «abcde # 0», «abcde # 1» и т. д. Конечно, желаемый результат - ничего не происходит, пока я не нажму кнопку поиска.

          #pragma mark -
          #pragma mark UISearchDisplayController Delegate Methods
          
          - (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
              return NO;
          }
          
          - (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption {
              return NO;
          }
          
          
          #pragma mark -
          #pragma mark UISearchBarDelegate Methods
          
          - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
              [self.searchDisplayController.searchResultsTableView reloadData];
          
          }
          
          
          #pragma mark -
          #pragma mark Table view data source
          
          - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
              return 1;
          }
          
          - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
              return 20;
          }
          
          - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
              static NSString *CellIdentifier = @"Cell";    
              UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
              if (cell == nil) {
                  cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
              }
              cell.textLabel.text = [self.searchDisplayController.searchBar.text stringByAppendingFormat:@" #%d", indexPath.row]; 
              return cell;
          }
          

          Спасибо! (кстати, это мой первый вопрос, который задают здесь - дайте мне знать, если я пропущу какие-либо правила этикета:)

7
задан Cliff W 13 October 2010 в 05:04
поделиться