1

У меня есть поиск кнопок, который находится в правой части навигации. Это мой код:Как показать и скрыть UISearchDisplayController's UISearchBar

UIButton *btnSearch = [UIButton buttonWithType:UIButtonTypeCustom]; 
btnSearch.frame = CGRectMake(0, 0, 22, 22); 
[btnSearch setImage:[UIImage imageNamed:@"search_btn.png"] forState:UIControlStateNormal]; 
[btnSearch addTarget:self action:@selector(showSearch:) forControlEvents:UIControlEventTouchUpInside]; 

UIBarButtonItem *searchItem = [[UIBarButtonItem alloc] initWithCustomView:_btnSearch]; 

self.navigationItem.rightBarButtonItems = searchItem ; 

Это как это смотреть.
enter image description here

И я хочу, чтобы отобразить строку поиска после нажатия на кнопку поиска, и закрыть его после нажатия на отмените, а затем показать Панель навигации назад, но я не знаю, как его код.

- (IBAction)showSearch:(id)sender{ 
    ??? 
} 

Это то, что я хочу. enter image description here

Пожалуйста, помогите или укажите пример кода. Мне это действительно нужно.

Благодарим за чтение.

ответ

4

Добавьте свойство UISearchBar *mySearchBar к вашему ViewController в

@property(nonatomic, retain) UISearchBar *mySearchBar;

Соответствуют UISearchBarDelegate в

@interface HomeViewController() <UISearchBarDelegate> 
... 
... 
@end 

Затем реализовать метод showSearch в

-(void)showSearch:(id)sender { 
if(!mySearchBar) { 
    mySearchBar = [[UISearchBar alloc] init]; 
    [mySearchBar setFrame:CGRectMake(0, 0, self.view.frame.size.width, 55)]; 
    [mySearchBar setShowsCancelButton:YES animated:YES]; 
    [self.view addSubview: mySearchBar]; 
    mySearchBar.delegate = self; 
    self.navigationController.navigationBarHidden = YES; 
}else { 
    searchBar.alpha = 1.0; 
    self.navigationController.navigationBarHidden = YES; 
} 

Затем реализовать метод делегирования панели поиска как:

- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar { 
     self.navigationController.navigationBarHidden = NO; 
     [mySearchBar setAlpha:0.0]; 
    } 

Надеюсь, у вас есть идея, сделав это. Также вы можете добавить его непосредственно в контроллер навигации, если хотите, &, а затем играть с показом/скрытием searchBar.

Вы можете добавить его к навигации контроллера, как только инициализировать mysearchBar & добавить его в navigationBar как:

UIBarButtonItem *searchBarItem = [[UIBarButtonItem alloc] initWithCustomView:mySearchBar]; 
    self.navigationItem.rightBarButtonItem = searchBarItem; 
+0

Спасибо так много. Сейчас это работа. Но ,,, как заставить его стать ответчиком, так что мне не нужно нажимать на поиск в текстовом поле. Я имею в виду, когда пользователь нажимает кнопку «Поиск» на панели навигации, а затем показывает mySearchbar с мигающим курсором внутри поиска в текстовом поле! Thank ^^ –

+0

Вы должны сообщить системе, что хотите, чтобы ваша поисковая панель была первым ответчиком. Так что просто добавьте эту строку в код, где бы вы ни показывали свою панель поиска. В приведенном выше коде вы можете добавить его после блока if-else. (или добавить его внутри, если так же, как и блок else). '[mySearchBar getFirstResponder];' –

+0

Кнопка отмены поиска работает хорошо. когда нажата кнопка отмены, она скроет панель поиска, а затем отобразит навигационную панель. Как выйти из строки поиска, не нажав кнопку отмены? Я имею в виду, даже если пользователь нажимает на сторону поиска текстового поля, например (список результатов). Thank –

Смежные вопросы