4

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

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

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

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

[self.searchDisplayController.searchResultsTableView removeFromSuperview];

и

self.searchDisplayController.searchResultsTableView.hidden = YES;

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

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

+1

У вас есть метод shouldReloadTableForSearchString реализован в вашей реализации для делегат UISearchDisplayController? –

+0

Спасибо за ваш комментарий! Да, у меня есть, метод shouldReloadTableForSearchString не изменяется от исходной версии Apple, иначе я бы разместил измененный код. Я совершенно уверен, что я не изменил никаких решающих методов в этом вопросе. Ни "filterContentForSearchText". – John

ответ

16

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

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

[self.searchDisplayController.searchResultsTableView reloadData] 

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

0

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

self.searchBar.text = @"xxxx"; 
[self.searchDisplayController.searchResultsTableView removeFromSuperview]; 
Смежные вопросы