Программным образом использовать UISearchDisplayController

У меня есть приложение, которое асинхронно ищет удаленный API и отображает пользовательский интерфейс с помощью iOS 'UISearchDisplayController.

Для сохраненной функции поиска я пытаюсь программным образом использовать UISearchDisplayController, чтобы как инициировать поиск, так и настроить интерфейс пользователя, когда он был там, где он был раньше. (То есть, я пытаюсь открыть панель поиска и задать поисковый запрос.)

searchTableViewController.searchDisplayController.searchBar.text = mySearchTerm;
//[...]
[searchTableViewController.searchDisplayController setActive:YES animated:YES];
[searchTableViewController performSearch];

Код, который я пробовал до сих пор - не похоже на трюк. Пока он правильно выводит строку поиска, задает поисковый запрос и выполняет поиск, система, похоже, как-то не признает это как действительный поиск. Если я использую свои пальцы в представлении результатов, чтобы клавиатура исчезла, термин поиска сбрасывается и результаты исчезают.

Помогите оценить. Спасибо!

1 ответ

Я столкнулся с той же проблемой. Я решил это, создав ivar NSString * savedSearchString; и добавив следующие методы в делегат для UISearchDisplayController.

- (void) searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller
{
 // saves search string for next search
 [savedSearchString release];
 savedSearchString = [controller.searchBar.text retain];
 return;
}
- (void) searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller
{
 // shows keyboard and gives text box in searchBar the focus
 [controller.searchBar becomeFirstResponder];
 // shows previous search results
 if ((savedSearchString))
 controller.searchBar.text = savedSearchString;
 return;
}

Добавление строки controller.searchBar.text = savedSearchString; в searchDisplayControllerWillBeginSearch: приведет к появлению поискового термина в UISearchBar, однако таблица результатов не будет перезагружена.

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

licensed under cc by-sa 3.0 with attribution.