2015-10-13 1 views
0

У меня есть UISearchBar с некоторыми настройками и создать UISearchDisplayController как этотСкрытие поиска бар UISearchDisplayController

self.searchController = [[UISearchDisplayController alloc]initWithSearchBar:self.searchBar contentsController:self]; 

Я хочу панель поиска появится на панели навигации, поэтому я также установить

self.searchDisplayController.displaysSearchBarInNavigationBar = true; 

Теперь панель поиска отображается в панели навигации, но я хочу показать строку поиска моего UISearchDisplayController только тогда, когда я нажимаю элемент кнопки панели навигации. Я хочу иметь поведение, как:

  1. Скрыть панель поиска первоначально
  2. Показать панель поиска при нажатии кнопки панель навигации щелкнул
  3. Скрыть панель поиска, когда я нажмите кнопку «Отмена» в результаты поиска Бар

Я пытался скрыть/показать это нравится:

self.searchDisplayController.searchBar.hidden = YES; 

но сотрудничества de не работает. Я потратил много времени на поиск решения, чтобы иметь поведение, которое я хочу, и до сих пор не повезло. Благодарю.

+0

У вас есть три задачи, выстроились в очередь, чтобы закончить. Кто-нибудь из них работает? – andrewbuilder

+0

Ни один из этих шагов не работает, так как я не нашел способ скрыть/отменить панель поиска UISearchDisplayController. –

+0

Вы довольны тем, что панель поиска прокручивается с экрана (не анимированная) и под верхней панелью Nav, нажав панель Nav, она убирает ее, чтобы отобразить панель поиска внизу (анимированная), нажмите «Отмена» на панели поиска, которая восстанавливает Nav bar назад сверху панели поиска (анимированные)? – andrewbuilder

ответ

0

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

CGRect searchFrame = self.searchDisplayController.searchBar.frame; 
searchFrame.size.height = 0; 
self.searchDisplayController.searchBar.frame = searchFrame; 
self.searchDisplayController.searchBar.hidden = YES; 

EDIT: Я просто попытался с ниже код и он работал. Посмотрите, поможет ли это вам!

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self.searchDisplayController.searchContentsController.navigationController setNavigationBarHidden:YES animated:YES]; 
    [self performSelector:@selector(test) withObject:nil afterDelay:2.0]; 
} 


- (void)test { 
    [self.searchDisplayController.searchContentsController.navigationController setNavigationBarHidden:NO animated:YES]; 
} 
+0

Я попытался добавить этот код в 'viewDidLoad' или' viewDidAppear'. Но панель поиска все еще отображается. –

+0

Я вижу, что вы передаете 'self.seachbar'. Как насчет 'self.searchbar.hidden = YES'? – Abhinav

+0

Это тоже не работает. Похоже, что скрытие '' SearchBar 'UISearchDisplayController' не работает, когда установлено' self.searchDisplayController.displaysSearchBarInNavigationBar = true; '? –

0

Возможно, это подходящее решение?

Для выполнения задания 1, в методе жизненного цикла ТВЦ viewDidLoad, вставить неанимированный свиток, который помещает строку поиска под панели нав ...

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // Scroll off screen the search bar (44 points) 
    [[self tableView] setContentOffset:CGPointMake(0, 44)]; 

    // other code for method 
} 

Чтобы завершить задачу 2, в вашем ТВЦ создать метод пользовательского действия, связанные с UIBarButtonItem, который эффективно скрывает панель Nav, в то же время, раскрывающей строку поиска ...

- (IBAction)hideNavBar:(UIBarButtonItem *)sender { 

    [[self navigationController] setNavigationBarHidden:YES animated:YES] 

} 

для выполнения задачи 3, в вашем ТВЦ использовать метод UISearchDisplayController Делегирование эффективно отобразить панель Nav и в то же время скрыть строку поиска ...

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { 

    [[self navigationController] setNavigationBarHidden:NO animated:YES]; 
    [[self tableView] setContentOffset:CGPointMake(0, 44)]; 

    // You might also like to... 
    [self setSearchBarText:nil]; // if you are using a property to hold the search bar text 
    [self setSearchResults:nil]; // if you are using a property to hold the search results 

}