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

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

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

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

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

[self.searchDisplayController.searchResultsTableView removeFromSuperview];

и

self.searchDisplayController.searchResultsTableView.hidden = YES;

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

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


person John    schedule 16.01.2011    source источник
comment
Есть ли в вашей реализации метод shouldReloadTableForSearchString для делегата UISearchDisplayController?   -  person Dan K.    schedule 16.01.2011
comment
Спасибо за ваш комментарий! Да, метод shouldReloadTableForSearchString не изменился по сравнению с оригинальной версией Apple, иначе я бы опубликовал свой измененный код. Я совершенно уверен, что не изменил никаких решительных методов в этом вопросе. Ни filterContentForSearchText.   -  person John    schedule 16.01.2011


Ответы (2)


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

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

[self.searchDisplayController.searchResultsTableView reloadData]

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

person Ha-eun Chung    schedule 17.04.2011

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

self.searchBar.text = @"xxxx";
[self.searchDisplayController.searchResultsTableView removeFromSuperview];
person Mr. Ming    schedule 20.09.2011