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
}
}
Selon Apple:
UISearchDisplayController
est déconseillé dans iOS 8. (Notez queUISearchDisplayDelegate
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ôtUISearchController
.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 objetUIViewController
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:
Vous pouvez le faire très facilement, sélectionnez simplement votre ViewController
et voyez les étapes suivantes:
Et puis vous devriez voir dans votre appareil lorsque vous cliquez sur la barre de recherche l'image suivante:
J'espère que cela vous aide