UISearchBar und Ereignis ausgelöst, wenn das Element 'X' angetippt wird

8

In der UISearchBar gibt es ein X-Element, mit dem Sie alle Inhalte gleichzeitig löschen können. Gibt es eine Möglichkeit, benachrichtigt zu werden, wenn dies passiert?

UISearchBarDelegate::searchBarCancelButtonClicked wird nur ausgelöst, wenn die Schaltfläche "Abbrechen" angetippt wird.

    
Justin Galzic 08.11.2010, 01:07
quelle

4 Antworten

6

UISearchBar hat keine Delegate-Methode für dieses Ereignis. Sie können fast erreichen, was Sie wollen, indem Sie die Methode textDidChange: des Callback-Delegaten implementieren und nach einer leeren Zeichenfolge suchen.

Ich empfehle es nicht, aber es gibt einen anderen möglichen Weg. Das UISearchBar besteht aus einem UITextField, das eine Delegate-Methode hat, die aufgerufen wird, wenn der Benutzer auf die Schaltfläche zum Löschen klickt ( textFieldShouldClear: ). Sie können UITextField ermitteln, indem Sie die untergeordneten Ansichten von UISearchBar durchlaufen:

(dies ist im Kontext einer abgeleiteten Klasse UISearchBar )

%Vor%

Von hier aus können Sie den UITextField -Delegaten erneut der eigenen Implementierung zuweisen und dafür sorgen, dass Delegierungsaufrufe an den alten Delegaten weitergeleitet werden. Auf diese Weise konnten Sie textFieldShouldClear: abfangen. Oder wenn es sich herausstellt, dass UISearchBar der Delegat für das UITextField ist, das es enthält, könnten Sie den Aufruf an textFieldShouldClear wechseln: ... Nicht ideal, klar, aber technisch machbar.

    
TomSwift 08.11.2010, 05:17
quelle
2

Ich hatte das gleiche Problem und habe dieses Problem mit dieser Funktion gelöst.

%Vor%     
Akhtar 21.05.2014 18:20
quelle
1

Hier ist eine Antwort von einer vorherigen Frage, das sollte genau das tun, was Sie wollen. UISearchbar clearButton zwingt die Tastatur zum Anzeigen

    
Tozar 16.11.2010 04:50
quelle
0

Hier ist die "Method Swizzling" Lösung.

  1. Erstelle eine neue Kategorie von UISearchBar . Diese Kategorie erstellt eine neue Methode und eine Swizzle-Methode zwischen -(BOOL)textFieldShouldClear:(UITextField *)textField; und -(BOOL)jbm_textFieldShouldClear:(UITextField *)textField in Runtime.
  2. Passen Sie ein neues Protokoll von UISearchBarDelegate an, um eine neue Methode hinzuzufügen - (void)searchBarClearButtonClicked:(id)sender;

UISearchBar + JMBTextFieldControl.h

%Vor%

UISearchBar + JMBTextFieldControl.m

%Vor%

Referenz

  1. Dave DeLong - So fügen Sie eine Methode zu einem vorhandenen Protokoll hinzu Kakao?

  2. Nikolai Wlassow - CCBottomRefreshControl

Jim Yu 08.01.2016 08:05
quelle