web-dev-qa-db-fra.com

UISearchBar dans la barre de navigation

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.

50
Samui

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;
83
Borut Tomazin

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.

20
James Kuang

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.

enter image description here

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];
    ...
}
12
djibouti33

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.

11
Steve Moser

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/

0
yoAlex5