web-dev-qa-db-fra.com

Affichage de la barre de recherche dans la barre de navigation dans iOS 8

UISearchDisplayController avait une propriété boolean appelée displaysSearchBarInNavigationBar. Quel est l'équivalent dans iOS 8 pour que ma barre de recherche se déplace vers le haut? Tout conseil est grandement apprécié.

Voici mon code, je ne sais pas vraiment pourquoi cela ne fonctionne pas. Lorsque je clique sur la barre de recherche, elle disparaît simplement au lieu de se déplacer et de la barre de navigation vers le haut.

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

Selon Apple:

UISearchDisplayController est déconseillé dans iOS 8. (Notez que UISearchDisplayDelegate est également déconseillé.) Pour gérer la présentation d'une barre de recherche et afficher les résultats de la recherche dans iOS 8 et versions ultérieures , utilisez plutôt UISearchController .

La classe UISearchController définit une interface qui gère la présentation d'une barre de recherche de concert avec le contenu du contrôleur de résultats de recherche. Le contrôleur de résultats de recherche, un objet UIViewController spécifié par la propriété searchResultsController , gère les résultats de la recherche.

Vous pouvez maintenant utiliser le UISearchController pour afficher la barre de recherche dans votre barre de navigation de la manière suivante:

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

Mais vous devez considérer que vous devez définir un UINavigationController comme dans ce Storyboard:

enter image description here

Vous pouvez le faire très facilement, sélectionnez simplement votre ViewController et voyez les étapes suivantes:

enter image description here

Et puis vous devriez voir dans votre appareil lorsque vous cliquez sur la barre de recherche l'image suivante:

enter image description here

J'espère que cela vous aide

87
Victor Sigler