webentwicklung-frage-antwort-db.com.de

Anzeigen der Suchleiste in der Navigationsleiste in iOS 8

UISearchDisplayController hatte eine boolean -Eigenschaft namens displaysSearchBarInNavigationBar. Wie viel kostet es in iOS 8, dass meine Suchleiste nach oben verschoben wird? Jede Anleitung wird sehr geschätzt.

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

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
}
}
34
Mihado

Laut Apple:

UISearchDisplayController ist in iOS 8 veraltet. (Beachten Sie, dass UISearchDisplayDelegate ebenfalls veraltet ist.) Zum Verwalten der Darstellung einer Suchleiste und zum Anzeigen von Suchergebnissen in iOS 8 und höher Verwenden Sie stattdessen UISearchController .

Die Klasse UISearchController definiert eine Schnittstelle, die die Darstellung einer Suchleiste zusammen mit dem Inhalt des Suchergebniscontrollers verwaltet. Der Suchergebnis-Controller, ein UIViewController -Objekt, das von der searchResultsController -Eigenschaft angegeben wird, verwaltet die Suchergebnisse.

Jetzt können Sie mit dem UISearchController die Suchleiste in Ihrer Navigationsleiste folgendermaßen anzeigen:

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.
    }
}

Sie müssen jedoch berücksichtigen, dass Sie ein UINavigationController wie in diesem Storyboard festlegen müssen:

enter image description here

Sie können es ganz einfach tun, indem Sie Ihr ViewController auswählen und die folgenden Schritte ausführen:

enter image description here

Und dann sollten Sie in Ihrem Gerät sehen, wenn Sie in der Suchleiste das folgende Bild anklicken:

enter image description here

Ich hoffe das hilft dir

87
Victor Sigler