Презареждане/показване на searchResultsTableView на UISearchDisplayController след приключване на итерацията на метода за търсене

Промених кода на примерния iOS проект на Apple TableSearch за да го използвате за търсене в уеб услуга чрез анализиране на съдържанието му. Всичко, което внедрих, работи добре, с изключение на един грозен детайл при извършване на търсене с помощта на SearchBar на 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