2014-11-04 19 views
37

Also habe ich alles versucht, um eine Suchleiste in die Navigationsleiste in Swift zu bekommen. Aber leider habe ich es nicht funktioniert, bekommen nur noch ...Suchleiste in Swift in der Navigationsleiste

Für diejenigen von Ihnen, die nicht wissen, was ich rede, ich versuche, so etwas wie dieses

enter image description here

zu tun

Beachten Sie die Suchleiste in der Navigationsleiste. Also hier ist was ich zur Zeit mit

self.searchDisplayController?.displaysSearchBarInNavigationBar = true 

Ich steckte, dass in meinem viewDidLoad, und dann, wenn ich die App lade ich vorgestellt habe, nur eine leere Navigationsleiste .... :(Irgendwelche Ideen?

Antwort

49

Versuchen Sie, diese

var leftNavBarButton = UIBarButtonItem(customView:Yoursearchbar) 
    self.navigationItem.leftBarButtonItem = leftNavBarButton 

aktualisieren

Sie halten einen faulen UISearchBar Eigenschaft

lazy var searchBar:UISearchBar = UISearchBar(frame: CGRectMake(0, 0, 200, 20)) 

In viewDidLoad

searchBar.placeholder = "Your placeholder" 
var leftNavBarButton = UIBarButtonItem(customView:searchBar) 
self.navigationItem.leftBarButtonItem = leftNavBarButton 

Wenn Sie Storyboard benutzen Sie einfach Ihre searchbar als Steckdose ziehen, dann ersetzen Sie die faul Eigenschaft mit Steckdose searchbar

+0

Wie würde ich 'Yoursearchbar' identifizieren? – user302975

+0

Siehe Codes in Update – Leo

+0

So weit so gut. Aber wie würde ich einen Platzhalter hinzufügen? Irgendein Weg durch Storyboards? – user302975

10

Ihrer Ansicht Controller:

lazy var searchBar = UISearchBar(frame: CGRectZero) 

override func viewDidLoad() { 
    super.viewDidLoad() 

    searchBar.placeholder = "Search" 

    navigationItem.titleView = searchBar 
} 

Gehen Sie so vor, indem Sie die navigationItem.titleVie w, die Suchleiste wird automatisch auf die iPhone- und iPad-Geräte zentriert. Hinweis: Nur mit v8.4 und v9.0 getestet

für SWIFT 3

lazy var searchBar = UISearchBar(frame: CGRect.zero) 
+0

Wie kann man es aus der navigationItem.titleView entfernen, wenn der Benutzer auf "Abbrechen" klickt? – Satyam

+0

Gleiche Frage^ –

+1

Aus der Spitze meines Kopfes, wenn Sie von der Schaltfläche Abbrechen der Suchleiste sprechen. Implementieren Sie die UISearchBarDelegate-Funktion searchBarCancelButtonClicked (:), und rufen Sie in dieser Funktion navigationItem.titleView = nil auf. Dies sollte die Suchleiste entfernen, wenn das mit "Entfernen" gemeint ist. Stellen Sie für die normale Suchleistenfunktion außerdem sicher, dass Sie searchBarSearchButtonClicked (:) implementieren, indem Sie searchBar.resignFirstResponder() hinzufügen, um die Tastatur zu entfernen, wenn auf die Suchschaltfläche geklickt wird (oder über die Eingabetaste gestartet wird) – iAmcR

30
// create the search bar programatically since you won't be 
    // able to drag one onto the navigation bar 
    searchBar = UISearchBar() 
    searchBar.sizeToFit() 

    // the UIViewController comes with a navigationItem property 
    // this will automatically be initialized for you if when the 
    // view controller is added to a navigation controller's stack 
    // you just need to set the titleView to be the search bar 
    navigationItem.titleView = searchBar 
+0

Das ist ein viel besserer Weg als jede andere Lösung. – Profstyle

+0

@ antonio081014, bro könnten Sie mir helfen, einen Blick auf mein Problem zu werfen https://StackOverflow.com/Questions/46375778/add-navigation-bar-in-uicollectionview-in-swift-4-ios-11-11? –

0
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { 

    searchBar.endEditing(true) 
    searchBar.text = nil 
    print("## search btn clicked : \(searchBar.text ?? "")") 
} 
+1

Vielen Dank für dieses Code-Snippet, das möglicherweise eine begrenzte, sofortige Hilfe bietet. Eine gute Erklärung [würde erheblich verbessern] (// meta.stackexchange.com/q/114762) ist ihr langfristiger Wert, indem sie * warum * dies eine gute Lösung für das Problem darstellt, und es für zukünftige Leser mit mehr nützlich machen würde andere, ähnliche Fragen. Bitte [bearbeiten] Sie Ihre Antwort, um einige Erklärungen hinzuzufügen, einschließlich der Annahmen, die Sie getroffen haben. –

Verwandte Themen