Как установить текст в UISearchBar без активации UISearchDisplayController

Я использую UISearchDisplayController в моем приложении. Когда пользователь выбирает элемент в результатах поиска, я деактивирую UISearchDisplayController. Деактивация контроллера удаляет текст, набранный пользователем. Я хочу держать это там. Я могу принудительно вернуть текст обратно в UISearchBar, установив его снова после деактивации контроллера.

Вот так:

NSString* searchText = self.searchDisplayController.searchBar.text;
[self.searchDisplayController setActive:NO animated:YES];
self.searchDisplayController.searchBar.text = searchText;

Который работает.

Тем не менее, я вижу проблему синхронизации, если я не оживляю деактивированный вызов. Вызов setActive примерно так:

NSString* searchText = self.searchDisplayController.searchBar.text;
[self.searchDisplayController setActive:NO animated:NO];
self.searchDisplayController.searchBar.text = searchText;

заставляет UISearchDisplayController снова стать активным!

Есть ли способ, которым я могу установить текст UISearchBar, не имея UISearchDisplayController, который связан с становится активным? Любые другие предложения, чтобы обойти это поведение?

3 ответа

Решение

Для всех, кто интересуется, как это сделать, мне удалось заставить его работать, добавив это в мой делегат:

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    if(!controller.isActive){
        controller.searchResultsTableView.hidden = YES;
        return NO;
    }
    controller.searchResultsTableView.hidden = NO;

    [....]

    return YES;
}

Ответ Аарона работает отлично. Более простой способ сделать это, отредактировав код:

NSString* searchText = self.searchDisplayController.searchBar.text;
[self.searchDisplayController setActive:NO animated:NO];
self.searchDisplayController.delegate = nil;
self.searchDisplayController.searchBar.text = searchText;
self.searchDisplayController.delegate = self; //or any delegate you like!

Таким образом, ни одна из ваших функций делегата не будет запущена при настройке текста панели поиска.

На внутреннем форуме Apple кто-то предложил обходной путь установки текста заполнителя searchBar в последний текст поиска, когда UISearchDisplayController деактивируется. Оно появляется в коробке, но оно серого цвета. Не идеально, но возможно приемлемо.

Другие вопросы по тегам