webentwicklung-frage-antwort-db.com.de

UISearchBar in der Navigationsleiste

Wie kann ich eine UISearchBar in der Navigationsleiste anzeigen?

Ich kann nicht herausfinden, wie das geht.

Ihre Hilfe wird sehr geschätzt.

50
Samui

Um die searchBar in die Mitte der Navigationsleiste zu stellen:

self.navigationItem.titleView = self.searchBarTop;

Um searchBar auf die linke/rechte Seite der Navigationsleiste zu setzen:

UIBarButtonItem *searchBarItem = [[UIBarButtonItem alloc] initWithCustomView:searchBar];
self.navigationItem.rightBarButtonItem = searchBarItem;
83
Borut Tomazin

Ab iOS 7 unterstützt dies der UISearchDisplayController standardmäßig. Stellen Sie den displaysSearchBarInNavigationBar = YES des UISearchDisplayControllers ein, damit dies problemlos funktioniert.

Per Dokumentation:

Ab iOS 7.0 können Sie einen Suchanzeigecontroller mit einer Navigationsleiste (eine Instanz der UINavigationBar-Klasse) verwenden, indem Sie die Eigenschaften searchSearchBarInNavigationBar und navigationItem der Suchanzeigecontroller konfigurieren.

20
James Kuang

Wie ein Kommentator feststellte, verbirgt die Verwendung von searchDisplayController.displaysSearchBarInNavigationBar = true, dass alle vorhandenen Schaltflächenelemente der linken/rechten Leiste ausgeblendet werden.

Ich habe zwei verschiedene Möglichkeiten gefunden, ein searchBar zu einem navigationBar hinzuzufügen, indem die neue Eigenschaft von iOS7 auf searchDisplayController verwendet wird.

1) Nib-basierter Ansatz

Wenn Sie eine .xib verwenden, können Sie ein benutzerdefiniertes Laufzeitattribut für diesen Wert festlegen. Aus irgendeinem Grund bleibt das leftBarButtonItem im Takt. Ich habe es nicht mit einem rightBarButtonItem getestet.

enter image description here

2) Code (Timing Matters)

Wenn Sie in Code implementieren möchten, scheint das Timing von Bedeutung zu sein. Es scheint, dass Sie zuerst searchBar zu navigationBar hinzufügen und dann barButtonItem einstellen müssen.

- (void)viewDidLoad
{
    ...
    self.searchDisplayController.displaysSearchBarInNavigationBar = true;
    self.navigationItem.leftBarButtonItem = [UIBarButtonItem new];
    ...
}
12
djibouti33

Schauen Sie sich Apples UICatalog Beispielcode an. Es zeigt die Verwendung der neuen UISearchController auf drei verschiedene Arten: modal, in der Navigationsleiste und unterhalb der Navigationsleiste.

11
Steve Moser

Ziel-C-Code-Snippet

- (void)viewDidLoad {
    UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:nil];

    if (@available(iOS 11.0, *)) {

        self.navigationItem.searchController = searchController;
    } else {

        self.navigationItem.titleView = searchController.searchBar;
    }
}

Lesen Sie hier mehr - https://blog.kiprosh.com/ios-11-new-navigation-bar-and-search-controller/

0
yoAlex5