КРАТКОЕ ОПИСАНИЕ ПРОБЛЕМЫ: Я хочу установить текст поисковой панели без автоматического запуска контроллера отображения поиска, который привязан к нему.searchdisplaycontroller: изменить текст строки поиска
ДОПОЛНИТЕЛЬНОЕ ОПИСАНИЕ ПРОБЛЕМЫ: У меня есть приложение iphone с панелью поиска и контроллером поиска. Контроллер searchdisplay используется для автозаполнения. Для автозаполнения я использую базу данных sqlite. Пользователь вводит первые несколько букв ключевого слова, и результат отображается в таблице searchdisplaycontroller. Запрос на выбор sql выполняется для каждого введенного символа. эта часть работает нормально, буквы введены и результаты видны.
Проблема заключается в следующем: если пользователь выбирает строку из таблицы, я хочу изменить текст строки поиска на текст, который был выбран в таблице результатов автозаполнения. Я также хочу скрыть контроллер отображения поиска. Это не работает. После исчезновения контроллера отображения поиска текстовое поле в строке поиска пуст. Я понятия не имею, что случилось. Я не думал, что так просто, как изменение текста текстового поля может стать настолько сложным.
Я попытался изменить текст в 2 методах: Сначала в методе 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]; //
В этом методе я вызываю другой метод, который выбирает данные из sqlite. Эта часть работает.
- (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;
}
Пожалуйста, спросите меня, неясно, в чем моя проблема. Мне нужна ваша помощь. Спасибо
FYI: 'searchDisplayController' устарел в iOS 8. Посмотрите на' UISearchController' – Besi