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;
}

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


person gyozo kudor    schedule 04.03.2010    source источник


Ответы (2)


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

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

person yonel    schedule 15.03.2010
comment
К вашему сведению: searchDisplayController устарело в iOS 8. Взгляните на UISearchController - person Besi; 12.06.2015

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


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

    }
}

person gyozo kudor    schedule 15.03.2010