Il semble que vous avez déjà une poignée sur l'ajout du bouton de recherche dans la barre de navigation, mais dans le cas où vous n'êtes pas, voici le code qui peut le faire:
// perhaps inside viewDidLoad
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemSearch
target:self
action:@selector(showSearch:)] autorelease];
Une fois que vous avez dans place, vous devez implémenter la méthode showSearch: pour basculer la visibilité de la barre de recherche. Un point clé à considérer ici est que le UISearchDisplayController n'est pas une vue; l'UISearchBar que vous avez configuré avec est ce qui montre réellement l'interface de recherche. Donc, ce que vous voulez vraiment faire est de basculer la visibilité de cette barre de recherche. Les méthodes ci-dessous utilisent la propriété alpha de la barre de recherche pour la masquer ou la masquer, tout en animant le cadre de la vue principale pour occuper (ou quitter) l'espace occupé par la barre de recherche.
- (void)showSearch:(id)sender {
// toggle visibility of the search bar
[self setSearchVisible:(searchBar.alpha != 1.0)];
}
- (void)setSearchVisible:(BOOL)visible {
// assume searchBar is an instance variable
UIView *mainView = self.tableView; // set this to whatever your non-searchBar view is
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:UINavigationControllerHideShowBarDuration];
if (!visible) {
searchBar.alpha = 0.0;
CGRect frame = mainView.frame;
frame.origin.y = 0;
frame.size.height += searchBar.bounds.size.height;
mainView.frame = frame;
} else {
searchBar.alpha = 1.0;
CGRect frame = mainView.frame;
frame.origin.y = searchBar.bounds.size.height;
frame.size.height -= searchBar.bounds.size.height;
mainView.frame = frame;
}
[UIView commitAnimations];
}