Как установить текст в 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? Любые другие предложения, чтобы обойти это поведение?

Ответ 1

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

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

    [....]

    return YES;
}

Ответ 2

Ответ Аарона отлично работает. Простейший способ сделать вещи, отредактировав свой мир кода:

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!

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

Ответ 3

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