2015-05-13 17 views
31

UISearchDisplayController hatte eine boolean Eigenschaft namens displaysSearchBarInNavigationBar. Was ist in iOS 8 gleichzusetzen, damit meine Suchleiste dort hochgeht? Jede Anleitung wird sehr geschätzt.Anzeige der Suchleiste in der Navigationsleiste in iOS 8

Hier ist mein Code, ich bin mir nicht ganz sicher, warum das nicht funktioniert. Wenn ich auf die Suchleiste klicke, verschwindet sie einfach, anstatt sich selbst und die Navigationsleiste zu bewegen.

import UIKit 

class ViewController: UIViewController, UISearchResultsUpdating, UISearchControllerDelegate, UISearchBarDelegate, UITableViewDelegate, UITableViewDataSource { 

let searchController = UISearchController(searchResultsController: nil) 

var tableView = UITableView() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    self.searchController.searchResultsUpdater = self 
    self.searchController.delegate = self 
    self.searchController.searchBar.delegate = self 

    self.searchController.hidesNavigationBarDuringPresentation = true 
    self.searchController.dimsBackgroundDuringPresentation = true 

    tableView.dataSource = self 
    tableView.delegate = self 


    self.navigationItem.titleView = searchController.searchBar 


    self.definesPresentationContext = true 

    self.setupSearchBar() 




} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func updateSearchResultsForSearchController(searchController: UISearchController) { 

} 

func setupSearchBar() { 

    // Set search bar position and dimensions 
    var searchBarFrame: CGRect = self.searchController.searchBar.frame 
    var viewFrame = self.view.frame 
    self.searchController.searchBar.frame = CGRectMake(searchBarFrame.origin.x, searchBarFrame.origin.y + 64,viewFrame.size.width, 44) 


    // Add search controller's search bar to our view and bring it to forefront 
    self.view.addSubview(self.searchController.searchBar) 

} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell = UITableViewCell() 

    return cell 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 5 
} 
} 

Antwort

74

Laut Apple:

UISearchDisplayController in iOS ist veraltet 8. (Beachten Sie, dass UISearchDisplayDelegate ist auch veraltet.) Um die Präsentation eines Suchleiste und Anzeige Suchergebnisse in iOS 8 zu verwalten und später Verwenden Sie stattdessen UISearchController.

Die UISearchController Klasse definiert eine Schnittstelle, die die Darstellung einer Suchleiste in Übereinstimmung mit dem Inhalt des Suchergebnis-Controllers verwaltet. Der Suchergebniscontroller, ein Objekt UIViewController, das von der searchResultsController-Eigenschaft angegeben wird, verwaltet die Ergebnisse der Suche.

Jetzt können Sie die UISearchController verwenden, um die Suchleiste in Ihrer Navigationsleiste in der folgenden Art und Weise zu zeigen:

class ViewController: UIViewController, UISearchControllerDelegate, UISearchResultsUpdating, UISearchBarDelegate { 

    var searchController : UISearchController! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.searchController = UISearchController(searchResultsController: nil) 

     self.searchController.searchResultsUpdater = self 
     self.searchController.delegate = self 
     self.searchController.searchBar.delegate = self 

     self.searchController.hidesNavigationBarDuringPresentation = false 
     self.searchController.dimsBackgroundDuringPresentation = true 

     self.navigationItem.titleView = searchController.searchBar 

     self.definesPresentationContext = true   
    } 

    func updateSearchResults(for searchController: UISearchController) { 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 

Aber Sie müssen bedenken Sie UINavigationController wie in diesem Storyboard festlegen müssen:

enter image description here

Sie können es ganz einfach nur Ihre ViewController wählen und die folgenden Schritte finden Sie unter:

enter image description here

Und dann sollten Sie in Ihrem Gerät angezeigt, wenn Sie klicken Sie in der Suchleiste folgendes Bild machen:

enter image description here

ich diese Hilfe hoffen, dass Sie

+1

, die nicht tu es wirklich für mich. Ich habe meinen Code veröffentlicht. Fühlen Sie sich frei, es anzuschauen und sagen Sie mir, warum das nicht so läuft, wie ich es möchte. – Mihado

+1

@MihadAlzayat Ich habe es mit einer Navigationsleiste getestet und es funktioniert gut und verschwinden nicht, aber was Sie wirklich wollen? einen Suchbalken unterhalb der Navigationsleiste (oben in der Tabellenansicht) platzieren? –

+0

@MihadAlzayat Siehe aktualisierte Antwort, um zu sehen, wie man es mit Navigationsleiste wie Sie –

Verwandte Themen