Как установить текст в UISearchBar без активации UISearchDisplayController - PullRequest
11 голосов
/ 15 марта 2011

Я использую 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 ]

10 голосов
/ 27 августа 2011

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

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

    [....]

    return YES;
}
6 голосов
/ 29 октября 2013

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

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 голосов
/ 17 марта 2011

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

...