Перезагрузка / Отображение searchResultsTableView UISearchDisplayController после завершения итерации метода поиска - PullRequest
4 голосов
/ 16 января 2011

Я изменил код примера iOS-проекта Apple TableSearch , чтобы использовать его для поиска в веб-сервисе путем анализа его содержимого. Все, что я реализовал, работает отлично, за исключением одной уродливой детали при выполнении поиска с использованием SearchBar SearchDisplayController. Я изменил поведение SearchDisplayController, чтобы он сначала вызывал мою функцию поиска при нажатии кнопки «Поиск».

Проблема заключается в том, что когда итерация поиска (которая выполняется в фоновом режиме в NSOperationQueue) завершена, «searchResultsTableView» (searchDisplayController) не отображается автоматически или ему не присваивается результирующее содержимое. Если вы затем измените текст панели поиска или нажмете кнопку «Отмена» в представлении, которое появляется при касании поля поиска (см. Поиск по таблице), появится правильный TableView с результатами поиска. Я просто хочу, чтобы этот шаг был выполнен сразу после завершения операции поиска, прежде чем вы начнете взаимодействовать. На данном этапе в настоящее время отображается ярлык «Нет результатов». Методы "filterContentForSearchText" и "shouldReloadTableForSearchString" не отличаются от исходного проекта TableSearch.

Я рассмотрел ссылки на различные классы SearchDisplayController и его атрибутов, но пока не смог найти окончательного решения.

Я попробовал следующее в разделе, который определенно повторяется после завершения NSOperation, но это, похоже, не решает проблему.

[self.searchDisplayController.searchResultsTableView removeFromSuperview];

и

self.searchDisplayController.searchResultsTableView.hidden = YES;

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

Заранее спасибо за ваши усилия!

Ответы [ 2 ]

16 голосов
/ 17 апреля 2011

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

Вам нужно перезагрузить searchResultTableView, а не текущий просмотр таблицы. После того, как вы отфильтруете свои данные по поисковому запросу, введите

[self.searchDisplayController.searchResultsTableView reloadData]

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

0 голосов
/ 20 сентября 2011

Я обнаружил, что установка searchBar.text вызывает добавление searchDisplayController.searchResultsTableView к self.view, я решаю это так:

self.searchBar.text = @"xxxx";
[self.searchDisplayController.searchResultsTableView removeFromSuperview];
...