Comment afficher une barre UISearchBar dans la barre de navigation?
Je n'arrive pas à comprendre comment faire cela.
Votre aide est très appréciée.
Pour placer la barre de recherche au centre de la barre de navigation:
self.navigationItem.titleView = self.searchBarTop;
Pour placer la barre de recherche à gauche/à droite de la barre de navigation:
UIBarButtonItem *searchBarItem = [[UIBarButtonItem alloc] initWithCustomView:searchBar];
self.navigationItem.rightBarButtonItem = searchBarItem;
Depuis iOS 7, UISearchDisplayController prend en charge cette fonctionnalité par défaut. Configurez le displaysSearchBarInNavigationBar = YES
de UISearchDisplayController pour que cela fonctionne facilement.
Selon la documentation:
À partir de iOS 7.0, vous pouvez utiliser un contrôleur d'affichage de recherche avec une barre de navigation (une instance de la classe UINavigationBar) en configurant les propriétés displaysSearchBarInNavigationBar et du contrôleur de recherche.
Comme l'a noté un intervenant, l'utilisation de searchDisplayController.displaysSearchBarInNavigationBar = true
finit par masquer tous les éléments de bouton de barre gauche/droite existants.
J'ai trouvé deux façons d'ajouter une searchBar
à une navigationBar
en utilisant la nouvelle propriété d'iOS7 sur searchDisplayController
.
1) Approche basée sur les plumes
Si vous utilisez un fichier .xib, vous pouvez définir un attribut d'exécution défini par l'utilisateur pour cette valeur et pour une raison quelconque, le paramètre leftBarButtonItem reste inchangé. Je ne l'ai pas testé avec un rightBarButtonItem.
2) Code (Moment Matters)
Si vous voulez implémenter dans le code, le timing semble avoir de l'importance. Il semble que vous deviez d'abord ajouter la searchBar
à la navigationBar
, puis définir votre barButtonItem
.
- (void)viewDidLoad
{
...
self.searchDisplayController.displaysSearchBarInNavigationBar = true;
self.navigationItem.leftBarButtonItem = [UIBarButtonItem new];
...
}
Consultez l'exemple de code UICatalog d'Apple. Il montre comment utiliser la nouvelle UISearchController
de trois manières différentes: modale, dans la barre de navigation et sous la barre de navigation.
Extrait de code Objective C
- (void)viewDidLoad {
UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
if (@available(iOS 11.0, *)) {
self.navigationItem.searchController = searchController;
} else {
self.navigationItem.titleView = searchController.searchBar;
}
}
Lisez plus ici - https://blog.kiprosh.com/ios-11-new-navigation-bar-and-search-controller/