0

КРАТКОЕ ОПИСАНИЕ ПРОБЛЕМЫ: Я хочу установить текст поисковой панели без автоматического запуска контроллера отображения поиска, который привязан к нему.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; 
} 
 

Пожалуйста, спросите меня, неясно, в чем моя проблема. Мне нужна ваша помощь. Спасибо

ответ

1

ли не попробовать: mainViewController.searchDisplayController.searchBar.text=selectedKeyword;

Вы получаете доступ к полю строки поиска от контроллера поиска и обновляете его текстовое содержимое.

+0

FYI: 'searchDisplayController' устарел в iOS 8. Посмотрите на' UISearchController' – Besi

0

Теперь это работает, я не знаю, что произошло. Я думаю, что я попытался отключить контроллер отображения поиска после изменения текста. В любом случае спасибо за помощь. Я думаю, что я также попытался изменить оригинальный текстовое поле не один, принадлежащий к контроллеру поиска дисплея и они разные (разные в памяти Адреса, телефоны, насколько я наблюдал)

 

- (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]; 

    } 
}