2014-07-01 12 views
6

Ich habe eine einfache UITableView mit UISearchBar/UISearchDisplayController die RKObjectManager mithilfe von Ergebnissen von entfernten Elasticsearch Server abruft. Problem, das ich habe ist, dass, wenn Benutzer zu schnell oder der Begriff ein wenig größer ist mehrere Anfragen fehlschlagen und manchmal bekomme ich nicht die Ergebnisse.iOS: Warten, bis der Benutzer beendet eingeben und dann die Anfrage senden

Gibt es eine Option, um warten, bis der Benutzer aufgehört hat eingeben und dann die Anfrage senden stattdessen Anfrage senden pro jeden Buchstaben tippt er in?

Antwort

22

eine kleine Verzögerung hinzufügen, bevor die Anforderung zu senden und dann die verzögerte Anforderung abbrechen, wenn der Benutzer

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    [NSObject cancelPreviousPerformRequestsWithTarget:self]; 

    [self performSelector:@selector(sendSearchRequest) withObject:searchText afterDelay:0.1f]; 
} 

Eingabe weiter müssen Sie die Verzögerungszeit einstellen können. zu lang und seine spürbar an den Benutzer, dass es eine Verzögerung gibt, zu kurz, und Sie haben das gleiche Problem wie jetzt

+0

Jede Idee, wie das in swift zu implementieren? – Ram

+0

@Ram Ich habe die hier vorgeschlagenen Antworten als Workaround für das Fehlen von performSelector in swift verwendet: http://stackoverflow.com/questions/24170282/swift-performselector-withobject-afterdelay – wattson12

+0

wow danke. Ich stolpere über diesen Beitrag, aber erinnere mich, dass ich den Nstimer ungültig machen kann. Danke allot – Ram

7

Dies ist für die schnelle Version

NSObject.cancelPreviousPerformRequestsWithTarget(self) 
self.performSelector("searchForText:", withObject: searchString, afterDelay: 0.5) 
+0

Danke für den schnellen Code! – Steve

Verwandte Themen