Скрыть UISearchbar как заголовок внутри UITableview при касании отмены - PullRequest
1 голос
/ 01 августа 2010

Я интегрировал UISearchDisplayController в xib моего контроллера.Основная функциональность, к которой я стремлюсь, - это иметь панель поиска в заголовке таблицы и кнопку на панели навигации, которая отображает экран поиска.

На чем я застрял: при отменеЯ хочу сделать панель поиска невидимой (держите таблицу так, чтобы индекс 0 отображался сверху, а не панель поиска), но она остается видимой, и я не уверен почему (см. 3-е изображение).Любые идеи о том, как всегда держать панель поиска скрытой при нажатии кнопки отмены (см. Изображение 1).

Что я пробовал:

  1. Установка для параметра tableview contentOffset равным 44.изначально работает.
  2. Вызов [tableview scrollToRowAtIndexPath: ....], который, похоже, ничего не делает.

Ответы [ 5 ]

2 голосов
/ 23 августа 2013

Если вы объявили свою панель поиска как свойство

@property(nonatomic, retain)UISearchBar *searchBar;

Вы можете установить

tableView.tableheader = nil;

и установите обратно

tableView.tableHeader = searchBar;

когда он тебе понадобится снова.

2 голосов
/ 30 марта 2011

Попробуйте это:

- (void)viewWillAppeared:(BOOL)animated
{
        [self hidesSeachBar];
        [super viewWillAppeared:animated];
}

- (void)hidesSearchBar
{
        CGSize searchSize = self.searchDisplayController.searchBar.bounds.size;
        //not complete
        [self.tableView setContentOffset:CGPointMake(0, searchSize.height)];
}

- (void) searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller
{
    //Your code

    [self.tableView reloadData];
    [self hidesSearchBar];
}
1 голос
/ 29 июня 2012

Установка смещения контента - это способ скрыть это, и вам нужно сделать это, когда поиск закончен. Я использую что-то вроде этого:

- (void) searchDisplayControllerWillEndSearch:(UISearchDisplayController*)controller
{
    [self hideSearchBar];
}


- (void) hideSearchBar
{
    self.table.contentOffset = CGPointMake( 0, self.searchBar.frame.size.height );  
}
0 голосов
/ 05 августа 2015

Чтобы скрыть панель поиска при отмене, вам нужно вызвать UISearchBarDelegate метод:

(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
    if(searchTask)[searchTask cancel];

    [self.searchResults removeAllObjects];
    [self.searchDisplayController.searchResultsTableView reloadData];

   //reload you table here
}

Спасибо

0 голосов
/ 20 мая 2012

, чтобы скрыть панель поиска UISearchDisplayController, вы должны установить его в неактивное состояние. Это также покажет панель навигации

В вашем случае вы должны убедиться, что вы используете протокол UISearchBarDelegate, а затем:

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
    [self.searchDisplayController setActive:NO animated:YES];
}
...