Füge Filtertaste zu UISearchController hinzu

8

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:

    
smnk 27.01.2016, 12:35
quelle

4 Antworten

4

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.

    
Pooja Sangle 30.05.2016 12:57
quelle
3

Ich habe viele Wege versucht, die Suchleiste anzupassen, aber nichts hat mir geholfen, endlich einen Weg gefunden zu haben, Ihre Anforderung zu erfüllen

%Vor%

obigen Code ist sehr einfach zu verstehen.

%Vor%

    
Gokul 27.05.2016 12:19
quelle
3

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%

Während searchController nicht aktiv ist

searchController ist aktiv

    
Ali Mert Özdemir 19.06.2017 01:12
quelle
0

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.

    
Wain 26.05.2016 12:29
quelle