2016-08-02 47 views
2

Ich habe ein Problem mit Suchleiste. Ich muss eine Tabellenansicht mit einer Suchschaltfläche in der rechten Ecke erstellen, und wenn ich darauf klicke, sollte die Suchleiste angezeigt werden.Zeige Suchleiste mit Aktion (Balkenartikel)

Mein Code ist hier:

// Search controller 
searchController = ({ 
    let controller = UISearchController(searchResultsController: nil) 
    controller.delegate = self 
    controller.searchBar.delegate = self 
    controller.searchResultsUpdater = self 
    controller.dimsBackgroundDuringPresentation = false   
    controller.hidesNavigationBarDuringPresentation = true 
    controller.searchBar.sizeToFit() 
    return controller 
})() 

Und hier ist Aktion:

// Search action 
@IBAction func search(sender: UIBarButtonItem) { 
    print("Open search") 
    searchController.active = true 
    if searchController.searchBar.isFirstResponder() == false { 
     searchController.searchBar.becomeFirstResponder() 
    } 
} 

Wenn ich auf die Schaltfläche klicken, geschieht nichts (nur druckt Text in der Konsole), und was ich will, ist im Bild unten:

Show search

Antwort

8

Ihre Klasse ein entsprechen muss UISearchBarDelegate, ich bin mir nicht sicher, ob Sie das schon getan haben. Stellen Sie außerdem sicher, dass Sie die Suchansicht

Von Apple Docs präsentieren:

Das UISearchBarDelegate-Protokoll definiert die optionalen Methoden, die Sie implementieren, um eine UISearchBar Steuerung funktionsfähig zu machen. Ein UISearchBar-Objekt stellt die Benutzeroberfläche für ein Suchfeld in einer Leiste bereit, es liegt jedoch in der Verantwortung der Anwendung, die Aktionen beim Antippen von Schaltflächen zu implementieren. Zumindest muss der Delegierte die tatsächliche Suche durchführen, wenn Text in das Textfeld eingegeben wird.

Hier ist ein Beispiel aus meiner app

@IBAction func searchAction(sender: UIBarButtonItem) { 
    // Create the search controller and specify that it should present its results in this same view   
    searchController = UISearchController(searchResultsController: nil) 

    // Set any properties (in this case, don't hide the nav bar and don't show the emoji keyboard option) 
    searchController.hidesNavigationBarDuringPresentation = false 
    searchController.searchBar.keyboardType = UIKeyboardType.ASCIICapable 

    // Make this class the delegate and present the search 
    self.searchController.searchBar.delegate = self 
    presentViewController(searchController, animated: true, completion: nil) 
}