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