searchdisplaycontroller: изменить текст панели поиска
КРАТКОЕ ОПИСАНИЕ ПРОБЛЕМЫ: Я хочу установить текст панели поиска без автоматического запуска контроллера дисплея поиска, который привязан к нему.
ПОЛНОЕ ОПИСАНИЕ ПРОБЛЕМЫ: У меня есть приложение для iphone с панелью поиска и контроллером отображения поиска. Searchdisplaycontroller используется для автозаполнения. Для автозаполнения я использую базу данных sqlite. Пользователь вводит первые несколько букв ключевого слова, и результат отображается в таблице searchdisplaycontroller. Запрос выбора SQL выполняется для каждого набранного символа. эта часть работает нормально, буквы были введены и результаты видны.
Проблема заключается в следующем: если пользователь выбирает строку из таблицы, я хочу изменить текст панели поиска на текст, который был выбран в таблице результатов автозаполнения. Я также хочу скрыть контроллер отображения поиска. Это не работает. После того, как поиск дисплея контроллера исчезает, текстовое поле в строке поиска остается пустым. Я понятия не имею, что не так. Я не думал, что что-то настолько простое, что изменение текста текстового поля может быть настолько сложным.
Я попытался изменить текст двумя способами: сначала в методе didSelectRowAtIndexPath (для таблицы результатов поиска контроллера отображения поиска), но это не помогло. Текст был там, когда контроллер отображения поиска был активен (анимировался), но после этого текстовое поле было пустым.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"didSelectRowAtIndexPath");
if (allKeywords.count > 0)
{
didSelectKeyword = TRUE;
self.selectedKeyword = (NSString *)[allKeywords objectAtIndex: indexPath.row];
NSLog(@"keyword didselectrow at idxp: %@", self.selectedKeyword);
shouldReloadResults = FALSE;
[[self.mainViewController keywordSearchBar] setText: selectedKeyword];
//shouldReloadResults = TRUE;
[[mainViewController searchDisplayController] setActive:NO animated: YES];
}
}
Я также попытался изменить его в методе searchDisplayControllerDidEndSearch, но это тоже не помогло. Текстовое поле было... снова... пустым.
изменить: на самом деле он не был пустым, текст был там, но после исчезающей анимации результаты таблицы автозаполнения все еще там. Так что в итоге становится хуже.
- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller
{
NSLog(@"searchDisplayControllerDidEndSearch");
if (didSelectKeyword)
{
shouldReloadResults = FALSE;
NSLog(@"keyword sdc didendsearch: %@", selectedKeyword);
[[mainViewController keywordSearchBar] setText: selectedKeyword]; //
In this method i call another method which selects the data from sqlite. This part is working.
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { NSLog(@"shouldReloadResults : %i", shouldReloadResults); if (shouldReloadResults) { NSLog(@"shouldReloadTableForSearchString: %@", searchString); [self GetKeywords: searchString : @"GB"]; NSLog(@"shouldReloadTableForSearchString vege"); return YES; } return NO; }
Пожалуйста, спросите меня, если не ясно, в чем моя проблема. Мне нужна ваша помощь. Спасибо
2 ответа
Разве вы не пробовали:mainViewController.searchDisplayController.searchBar.text=selectedKeyword;
Вы получаете доступ к полю панели поиска из контроллера поиска и обновляете его текстовое содержимое.
Теперь это работает, я не знаю, что случилось. Я думаю, что я пытался отключить контроллер отображения поиска после изменения текста. В любом случае спасибо за помощь. Я думаю, что я также попытался изменить исходное текстовое поле, а не принадлежащее контроллеру отображения поиска, и они отличаются (разные адреса в памяти, насколько я заметил)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//NSLog(@"didSelectRowAtIndexPath");
if (allKeywords.count > 0)
{
didSelectKeyword = TRUE;
self.selectedKeyword = (NSString *)[allKeywords objectAtIndex: indexPath.row];
NSLog(@"keyword didselectrow at idxp: %@", self.selectedKeyword);
//shouldReloadResults = FALSE;
[[mainViewController searchController] setActive:NO animated: YES];
[mainViewController.searchController.searchBar setText: self.selectedKeyword];
}
}