Держите поисковый термин видимым, когда UISearchDisplayController неактивен - PullRequest
6 голосов
/ 21 января 2011

Мое приложение использует UISearchDisplayController. Когда пользователь ввел поисковый запрос, я хочу, чтобы он оставался видимым в строке поиска. Это работает, если пользователь выбирает один из совпавших результатов, но не если пользователь нажимает кнопку «Поиск».

Это работает:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (tableView == self.searchDisplayController.searchResultsTableView) {
        NSString *selectedMatch = [self.searchMatches objectAtIndex:indexPath.row];
        [self.searchDisplayController setActive:NO animated:YES];
        [self.searchDisplayController.searchBar setText:selectedMatch];

        return;
    }
    ...

Но если я сделаю то же самое в -searchBarSearchButtonClicked:, текст не останется в строке поиска. Любые идеи о том, как я могу сделать это в этой ситуации?

Связано, если я устанавливаю текст панели поиска (но оставляю UISearchDisplayController неактивным), это вызывает отображение searchResultsTableView. Я хочу показать это только тогда, когда пользователь нажимает на панель поиска.

Редактировать: Найден обходной путь для установки текста панели поиска без отображения searchResultsTableView в любое время:

// This hacky YES NO is to keep results table view hidden (animation required) when setting search bar text
[self.searchDisplayController setActive:YES animated:YES];
[self.searchDisplayController setActive:NO animated:YES];
self.searchDisplayController.searchBar.text = @"text to show";

Лучшие предложения все еще приветствуются!

Ответы [ 2 ]

8 голосов
/ 21 января 2011

На самом деле вы не можете использовать тот же код внутри метода searchBarSearchButtonClicked, потому что у вас нет indexPath для выбора правильного элемента в вашем массиве searchMatches.

Если пользователь нажимает кнопку поиска и вы хотите скрыть интерфейс searchController, вам нужно выяснить, какой текст поместить в поиск (например, выбрать лучший результат поиска в списке).

Этот пример просто позволяет поисковому запросу оставаться видимым и неизменным, когда пользователь нажимает кнопку поиска:

-(void) searchBarSearchButtonClicked:(UISearchBar *)searchBar {
    NSString *str = searchBar.text;
    [self.searchController setActive:NO animated:YES];
    self.searchController.searchBar.text = str;
}

Надеюсь, это поможет, Винсент

4 голосов
/ 29 октября 2013

Сброс вручную строки в строке поиска снова вызывает некоторые методы UISearchDisplayDelegate. Это то, что вы, вероятно, не хотите, в данном случае.

Я бы немного изменил ответ vdaubry, и он дает мне:

-(void) searchBarSearchButtonClicked:(UISearchBar *)searchBar {
    NSString *str = searchBar.text;
    [self.searchController setActive:NO animated:YES];
    self.searchController.delegate = nil;
    self.searchController.searchBar.text = str;
    self.searchController.delegate = self //or put your delegate here if it's not self!
}
...