Ich möchte hinzufügen, eine "Filter" oder "Sortieren" -Taste neben der searchBar
innerhalb einer UISearchController
. Ich habe bereits versucht, die UIButton
und die searchbar
in eine UIView
und setzen Sie diese als meine UITableView tableView.tableHeaderView
Dies funktioniert nicht, weil die tableView.tableHeaderView
bekommen nur auf die UISearchBar
zurückgesetzt wird, wenn Sie den Controller entlassen. Hier ist ein Beispiel, wie ich will, dass es aussieht: Hinzufügen Filter Schaltfläche zu UISearchController
Antwort
Ich würde den Suchcontroller verlieren, bietet es keine Features, die Sie wirklich wollen und die zusätzliche Ansicht/VC, die Sie liefern müssen, fügt Komplexität/Code hinzu Vervielfältigung.
Ihre vorhandene Tabellenansicht hat bereits alles, was Sie brauchen, weil es eine Datenquelle hat. Das ist entweder ein Array oder ein FRC. Wenn es sich um ein Array handelt, können Sie den Inhalt des Arrays durch Ihren gefilterten Inhalt ersetzen, und wenn es ein FRC ist, können Sie das Prädikat ändern.
Hinweis: Im Array-Fall haben Sie 2 Array-Referenzen, 1 zeigt auf ein Array, das alle ungefilterten Elemente enthält, und ein anderes, das anfänglich ein Verweis auf das gleiche Array ist. Der zweite Verweis wird zum Auffüllen der Tabellenansicht verwendet. Wenn Sie dann filtern, erstellen Sie ein neues Array mit nur den gefilterten Elementen und verweisen auf die zweite Referenz.
Anstatt die Search-Controller-Delegate-Methode zu implementieren, implementieren Sie die Suchleisten-Delegate-Methoden und verwenden Sie diese, um Filterung und Reset auszulösen.
Jetzt haben Sie den Suchcontroller los, Sie wechseln auch nicht die Tabellenansichten, Sie haben also nur 1 TV- und 1 Header-Ansicht. Jetzt gibt es keinen Grund mehr, die Header-Ansicht zu ändern und alles funktioniert.
Rücktritt Ich verstehe nicht, was Sie suchen. Ich möchte nicht wissen, wie man einen TableView filtert, sondern wie man einen Filter Button direkt neben der Suchleiste (in einem Search Controller im Idealfall) bekommt. – smnk
Deshalb habe ich gefragt, ob ich den Search Controller verlieren könnte. Das Problem, das Sie haben, besteht darin, dass der Such-Controller eine andere Ansicht darstellt, so dass die Kopfzeile anders konfiguriert ist. Sie sollten nur einen anderen Header in der anderen Ansicht einrichten können. Ich finde, dass Suchmaschinen-Controller Komplexität für wenig echten Nutzen hinzufügen. Wenn Sie nur 1 Ansicht haben, haben Sie 1 Kopfzeile, die einfach zu konfigurieren ist und die Fokusverwaltung ist auch einfach. – Wain
Ich habe versucht, viele Art und Weise searchbar anzupassen ist, aber nichts hat mir geholfen, endlich einen Weg gefunden Voll zu füllen Ihre Anforderung
let mysearchController = UISearchController(searchResultsController: nil)
mysearchController.searchBar.showsCancelButton = true
mysearchController.searchBar.barStyle = UIBarStyle.Black
for var subView1 in mysearchController.searchBar.subviews{
for var subView2 in subView1.subviews{
if subView2 .isKindOfClass(UIButton){
let customizedCancelButton:UIButton = subView2 as! UIButton
customizedCancelButton.enabled = true
customizedCancelButton.setTitle("", forState: UIControlState.Normal)
let image1 = UIImage(named: "Sort")
customizedCancelButton.setBackgroundImage(image1, forState: UIControlState.Normal)
customizedCancelButton.addTarget(self, action: "sort", forControlEvents: UIControlEvents.TouchUpInside)
}
}
}
obigen Code einfach viel zu verstehen.
func sort(){
print("sort button fired!!!")
}
Statt die UISearchBar von Customizing und die Dinge zu verkomplizieren, können Sie es einfach halten, indem Sie Ihren eigenen Knopf neben SearchBar hinzufügen.
Stellen Sie die No Shows Abbruchtaste Option für SearchBar mit
self.searchBar.showsCancelButton = true
ODER
deaktivieren Shows Abbruchtaste Option für SearchBar in der Storyboard-
hinzufügen eigener Knopf b eside SearchBar wie unten gezeigt
und dann entsprechend IBAction auf die Schaltfläche Hinzufügen und Ihre Aktionen in ihm führen.
Auch im Idealfall ist es nicht empfehlenswert, diese Sicht in Header von tableview einzutragen. Es wird besser sein, wenn es über der Tabellenansicht ist, die auch von Apple gefolgt wird.
Ich konnte einen Suchfilter mit ein paar Zeilen Code erstellen. Ich hoffe, es hilft.
* Ich wählte die Lesezeichenschaltfläche, um Filtersymbol anzuwenden; weil ich bereits cancel button für benutzerdefinierte aktion verwendet habe.
Zuerst haben Sie delegate searchBar, um Lesezeichen-Schaltfläche Klick Aktion zu behandeln. Dann sollten Sie die Eigenschaften wie folgt festlegen. Wenn Sie eine benutzerdefinierte Position angeben möchten (Standardposition ist die rechte Seite), müssen Sie "Positionseinstellung" festlegen.
searchController.searchBar.delegate = self
searchController.searchBar.showsBookmarkButton = true
searchController.searchBar.setImage(UIImage(named: "Sort.png"), for: .bookmark, state: .normal)
// MARK: You may change position of bookmark button.
//searchController.searchBar.setPositionAdjustment(UIOffset(horizontal: 0, vertical: 0), for: .bookmark)
Dann überschreiben searchBarBookmarkButtonClicked-Funktion in Ihrem VC. Sie können das click-Ereignis in dieser Methode behandeln.
func searchBarBookmarkButtonClicked(_ searchBar: UISearchBar) { //showAlert, presentVC or whatever you want here }
Auch wenn Sie Lesezeichen-Taste ausblenden möchten, während Such Controller aktiv ist, müssen Sie die Kontrolle innerhalb updateSearchResults Methode anzuwenden.
if searchController.isActive {
searchController.searchBar.showsBookmarkButton = false
} else {
searchController.searchBar.showsBookmarkButton = true
}
Tolle Lösung! Vielen Dank. – Alessign
- 1. Abbrechen-Schaltfläche in UISearchController
- 2. Swift UIViewController hinzufügen UISearchController
- 3. Schaltfläche zu uitextfield hinzufügen
- 4. Schaltfläche zu QTableview hinzufügen
- 5. Filter zu ng-repeat hinzufügen
- 6. hinzufügen UISearchController auf eine Navigationsleiste iOS
- 7. Schaltfläche zu einem Bild hinzufügen
- 8. Hinzufügen einer Schaltfläche zu MediaController
- 9. Bootstrap: Schaltfläche zu Listengruppenelementen hinzufügen
- 10. Schaltfläche zu einer GroupBox hinzufügen
- 11. Filter hinzufügen
- 12. hinzufügen css 3 Bild Filter zu php
- 13. tvOS: Eine Möglichkeit, UISearchController nicht als Schaltfläche anzuzeigen?
- 14. Opencart Filter hinzufügen onclick-Ereignis, um die Schaltfläche zum Senden zu ersetzen
- 15. Hinzufügen Schaltfläche Minimieren/Maximieren zu JDialog oderJPanel
- 16. ExtJS: Hinzufügen von Schaltfläche zu HTMLEDITOR
- 17. Hinzufügen anklickbare Schaltfläche zu Ion-Radio
- 18. Hinzufügen von Schaltfläche zu jqGrid obere Symbolleiste
- 19. Hinzufügen Schaltfläche zu Gitter in ExtJs
- 20. Hinzufügen einer offensichtlichen (benutzerdefinierten) Schaltfläche zu UIActivityViewController
- 21. Hinzufügen Schaltfläche zu jquery UI-Dialog
- 22. Hinzufügen einer Schaltfläche zu einem Dialogfeld dynamisch
- 23. Hinzufügen einer Schaltfläche zu einem WPF DataGrid
- 24. Programmgesteuert hinzufügen neue Schaltfläche zu ASP.Net DetailsView
- 25. UISearchController mit UIBarPositionTopAttached wirft UISearchBar offscreen; Unmöglich, Standard UISearchController mit UITableView zu haben?
- 26. Hinzufügen eines UISearchController und programmgesteuertes Festlegen von Bedingungen mit Constraints
- 27. UISearchController UISearchBar nicht zu Statusleiste erweitern
- 28. Wie UISearchController nach didSelectRow zu entlassen?
- 29. Schaltfläche im Raster hinzufügen
- 30. Schaltfläche zum Frame hinzufügen
gibt es einen bestimmten Grund, warum Sie eine Suche-Controller verwenden? Bist du offen dafür, es nicht zu benutzen und die Tabellenansicht direkt zu filtern? – Wain
Der Grund ist rein optisch. Also würde ich mit allem in Ordnung sein – smnk
Ich sollte genauer sein, haben Sie bereits eine Tabellenansicht, sind Sie glücklich, nur zu filtern oder verwenden Sie eine speziell andere Ansicht, um die Suchergebnisse zu präsentieren/wollen die Search Controller Overlay-Fähigkeit? – Wain