Как установить текст в 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 деактивируется. Он появляется в коробке, но он седел. Не идеальный, но, возможно, приемлемый.