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
}
}
Laut Apple:
UISearchDisplayController
ist in iOS 8 veraltet. (Beachten Sie, dassUISearchDisplayDelegate
ebenfalls veraltet ist.) Zum Verwalten der Darstellung einer Suchleiste und zum Anzeigen von Suchergebnissen in iOS 8 und höher Verwenden Sie stattdessenUISearchController
.Die Klasse
UISearchController
definiert eine Schnittstelle, die die Darstellung einer Suchleiste zusammen mit dem Inhalt des Suchergebniscontrollers verwaltet. Der Suchergebnis-Controller, einUIViewController
-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:
Sie können es ganz einfach tun, indem Sie Ihr ViewController
auswählen und die folgenden Schritte ausführen:
Und dann sollten Sie in Ihrem Gerät sehen, wenn Sie in der Suchleiste das folgende Bild anklicken:
Ich hoffe das hilft dir