Резултатът от търсенето на UISearchDisplayController има различно оформление и поведение на клетките от търсената таблица

Използвам сториборд. Имам UITableView с една прототипна клетка. Тази клетка е със стил "подзаглавие". Добавих продължение от клетката към детайлния изглед. Така че, когато потребителят докосне клетка, той ще отвори съответния редактор... Всичко работи чудесно.

Сега добавих UISearchDisplayController и UISearchBar, внедрих делегатите. Това работи много добре.

Но в таблицата с резултати от търсенето клетките са със стил „по подразбиране“ и не могат да се докосват. Какво трябва да направя, за да получа таблица с резултати, която изглежда и се държи като "нетърсената" таблица?


person Shingoo    schedule 30.11.2011    source източник
comment
Причината за това е, че UISearchDisplayController създава свой собствен UITableView, следователно го създава с клетки по подразбиране.   -  person A Salcedo    schedule 01.12.2011


Отговори (5)


Бих искал да допринеса за отговор №1, това е, което направих и проработи за мен

в метода

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

вместо да присвоите клетката от параметъра tableView

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

присвоете го директно от TableView на изгледа, така че трябва да замените това

// UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

с тази

 UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
person jcubero    schedule 12.09.2012
comment
Това ми помогна. Тъй като всички прототипни клетки са в Normal/Original TableView, а не в Search TableView, добър съвет е да използвате self. вместо предадения параметър tableview! - person StuFF mc; 04.01.2013

Открих проблема...

Методът

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

изтегли клетката от tableView, което в резултата не е tableView от сценария, а resultTableView от SearchDisplayController.

Сега показвам клетката и в двата случая от табличния изглед в сценария и сега работи.

person Shingoo    schedule 01.12.2011
comment
Здравей Shingoo - имаш ли нещо против да обясниш или покажеш своя код, който коригира този проблем? - person dnstevenson; 09.02.2012
comment
Моят изглед не е обикновен изглед на маса. Имах нужда от фоново изображение, така че табличният изглед е вграден в uiview. контролерът на изгледа има изход към изгледа на таблицата. когато се извика cellForRowAtIndexPath, сега получавам клетката от изхода tableView, така че клетката винаги се извлича от табличния изглед, персонализиран в създателя на интерфейса. - person Shingoo; 15.02.2012

Използвал съм ios 7.0 и Xcode 5.0. Открих, че контролерът за показване на търсене използва същото оформление на изглед на таблица като контролера за изглед на делегат. Всичко, което трябва да направите, е да прецените дали текущият изглед на таблица е изглед на таблица на контролера на изгледа на делегата или изглед на таблица на контролера за показване на търсене. Но не забравяйте да добавите изречението

tableView.rowHeight = self.tableView.rowHeight;

в следния кодов фрагмент:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
if (tableView == self.searchDisplayController.searchResultsTableView)
{
    tableView.rowHeight = self.tableView.rowHeight;//very important!
    return [self.searchResults count];
}
else
{
    ...
    return ...;
}
}

ако забравите да приложите това изречение, тогава редът на табличния изглед на дисплея за търсене е висок само като ред по подразбиране, което ви кара да мислите, че не изглежда като "нетърсената" таблица.

person little pig    schedule 14.01.2014

Има възможен отговор на това тук. Може да не работи изцяло за вас, но както обясних, UISearchDisplayController създава табличния изглед.

Проверете документацията и можете да я разберете по-добре, но тя гласи:

Вие инициализирате контролер за показване на търсене с лента за търсене и контролер за изглед, отговорен за управлението на оригиналното съдържание, което трябва да се търси. Когато потребителят започне търсене, контролерът за показване на търсене е отговорен за наслагването на интерфейса за търсене върху оригиналния изглед на контролера за изглед и показването на резултатите от търсенето. Резултатите се показват в табличен изглед, създаден от контролера за показване на търсене. В допълнение към оригиналния контролер на изгледа, логично има четири други роли. Обикновено всички те се възпроизвеждат от един и същ обект, често самия оригинален контролер за изглед.

person A Salcedo    schedule 30.11.2011
comment
Благодаря за вашият отговор. Отстраних грешки в кода си и да, методите на източника на данни се извикват. Правилната клетка също се изтегля от сценария и се попълва с правилните данни, но таблицата с резултати показва стила на клетките на таблицата по подразбиране... Не мога да разбера защо... - person Shingoo; 01.12.2011

В моя случай UISearchDisplayController използваше правилния тип клетка (персонализиран), но височината на клетката беше грешна, така че трябваше да използвам

(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

метод за коригиране.

person Michal Gumny    schedule 21.07.2013