Как правильно использовать атрибут UISearchBarDelegate showsSearchResultsButton? - PullRequest
2 голосов
/ 12 марта 2011

Я настраиваю панель поиска для отображения кнопки результатов, но кнопка отображается только до тех пор, пока пользователь не введет символ. В этот момент кнопка отмены «X» заменяет ее. Таким образом, без ввода символов набор результатов поиска равен всему набору данных. Мне бы хотелось, чтобы кнопка результатов оставалась там, поэтому, когда пользователь набрал достаточно символов, чтобы получить меньший набор результатов (например, 5 или 6 строк), он может нажать кнопку результатов, мой делегат будет вызван, и я могу показать только этот набор результатов.

UISearchBar * theSearchBar = [[UISearchBar alloc] 
                             initWithFrame:CGRectMake(0,0,700,40)];
theSearchBar.delegate = self;

theSearchBar.placeholder = @"What are you looking for?";
theSearchBar.showsCancelButton = NO;         // shows up after first char typed.
theSearchBar.showsSearchResultsButton = YES; // disappears just when I need it.

... дальше в VC ... этот метод можно вызывать только тогда, когда поле ввода строки поиска пусто.

 - (void)searchBarResultsListButtonClicked:(UISearchBar *)searchBar {
         NSLog(@" searchBarResultsListButtonClicked for %@",searchBar); // 
    }

Приветствуются советы, учебные пособия, примеры кода и обоснованные допинг-шлепки. ТИА -Mike

Ответы [ 2 ]

12 голосов
/ 08 июля 2011

@ Rayfleck, я думаю, вам не стоит беспокоиться о кнопке результатов поиска.

Если вам нужно контролировать ввод пользователя, пока он не введет достаточно символов для фильтрации:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
    if ([searchText length]>5) {
        [self filterDataWithKeyword:searchText];
        [self.tableView reloadData];
    } else {
        [self resetFilter];
        [self.tableView reloadData];
    }
}
0 голосов
/ 06 июля 2011

Вот частичный ответ, который вы можете вставить в viewDidLoad.Она должна скрывать кнопку очистки, но она не оставляет кнопку результатов видимой.Я не уверен, как логика представления кнопок результатов контролируется за кулисами.

for (id subview in mySearchBar.subviews) {
  if ([[subview class] isSubclassOfClass:[UITextField class]]) {
    [subview setClearButtonMode:UITextFieldViewModeNever];
    break;
  }
}

Поскольку этот подход использует все открытые API, ваше приложение не должно быть отклонено.Хотя этот подход может привести к дальнейшему нарушению, если / когда Apple решит изменить иерархию UISearchBar.Все, что я делаю, это ищу UITextField или подкласс и устанавливаю его clearButtonMode.

Надеюсь, это поможет.

...