Ich möchte einen "Filter" oder "Sortier" Button neben dem searchBar
in einem UISearchController
hinzufügen. Ich habe bereits versucht, die UIButton
und die searchbar
in eine UIView
einzufügen und dies als meine UITableView tableView.tableHeaderView
zu setzen. Dies funktioniert nicht, da die tableView.tableHeaderView
nur beim Schließen des Controllers auf UISearchBar
zurückgesetzt wird . Hier ist ein Beispiel, wie ich es aussehen lassen möchte:
Anstatt die UISearchBar anzupassen und Dinge zu verkomplizieren, können Sie es einfach halten, indem Sie neben SearchBar eine eigene Schaltfläche hinzufügen.
Legen Sie die Schaltfläche für Abbrechen für SearchBar mit
fest %Vor%ODER
Deaktivieren Sie die Option Schaltfläche zum Abbrechen für SearchBar in StoryBoard
Fügen Sie neben SearchBar eine eigene Schaltfläche hinzu, wie unten gezeigt.
Und dann fügen Sie IBaction entsprechend der Schaltfläche hinzu und führen Sie Ihre Aktionen darin aus.
Auch im Idealfall ist es nicht empfehlenswert, diese Sicht in Kopfzeile der Tabellenansicht einzufügen. Es wird besser sein, wenn es über der Tabellenansicht liegt, wie auch von Apple gefolgt.
Ich könnte einen Suchfilter mit ein paar Zeilen Code erstellen. Ich hoffe es hilft.
* Ich habe die Lesezeichenschaltfläche zum Anwenden des Filtersymbols gewählt. weil ich bereits Abbrechen-Taste für benutzerdefinierte Aktion verwenden.
Zuerst haben Sie die delegate searchBar, um die Klickaktion der Lesezeichenschaltfläche zu bearbeiten. Dann sollten Sie die Eigenschaften wie folgt festlegen. Wenn Sie eine benutzerdefinierte Position angeben möchten (die Standardposition ist die rechte Seite), müssen Sie "Positionseinstellung" festlegen.
%Vor%Überschreibt dann die searchBarBookmarkButtonClicked-Funktion in Ihrem VC. Sie können Click-Ereignis innerhalb dieser Methode behandeln.
func searchBarBookmarkButtonClicked(_ searchBar: UISearchBar) {
//showAlert, presentVC or whatever you want here
}
Auch wenn Sie die Lesezeichenschaltfläche ausblenden möchten, während der Such-Controller aktiv ist, müssen Sie die Steuerung innerhalb der updateSearchResults-Methode anwenden.
%Vor%Ich würde den Such-Controller verlieren, er bietet keine Funktionen, die Sie wirklich wollen, und die zusätzliche Ansicht / VC, die Sie liefern müssen, fügt Komplexität / Code-Duplikation hinzu.
Ihre vorhandene Tabellenansicht enthält bereits alles, was Sie benötigen, da sie eine Datenquelle enthält. Das ist entweder ein Array oder ein FRC. Wenn es ein Array ist, 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 case 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 dasselbe 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 Delegiertenmethode für den Such-Controller zu implementieren, implementieren Sie die Delegiertenmethoden für die Suchleiste und verwenden diese, um das Filtern und Zurücksetzen auszulösen.
Nun haben Sie den Such-Controller losgeworden, Sie wechseln auch nicht die Tabellenansicht, Sie haben also nur eine TV- und eine Header-Ansicht. Jetzt gibt es keinen Grund, die Header-Ansicht zu ändern, und alles funktioniert einfach.
Tags und Links uitableview ios uisearchbar swift uisearchcontroller