2010-08-06 14 views
11

Ich habe eine sehr grundlegende UITableView mit einem daran befestigten UISearchBar, und hier ist der Fluss von dem, was passiert,UISearchBar und ResignFirstResponder

UITableView leer ist, Benutzer tippt UISearchBar und Tastatur bringt. Sobald der Benutzer tippt die Suchtaste

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { 
    [searchBar resignFirstResponder]; //move the keyboard out of the way 
    //Code.... 
} 

ganz gut funktioniert, und bewegt die Tastatur aus dem Weg, und füllt die UITableView. Das Problem sind alle nachfolgenden Suchversuche.

Die gleichen Schritte wie zuvor auftreten, jedoch wird die Tastatur nie entlassen. Ich habe das Gefühl, dass etwas anderes zum Responder wird. Ich brauche nur ein wenig Klarheit, um zu verstehen, was tatsächlich passiert.

Antwort

29

Ohne Ihren Code zu sehen, ist es schwierig zu erraten. Wenn Sie jedoch Folgendes einschließen:

[self.view endEditing:YES]; 

werden alle Ansichten auf den ersten Responder zurücktreten.

+0

das funktioniert perfekt für mich! – Raptor

+0

Ich hatte ähnliche Probleme mit UICollectionView-Zellen, die UITextFields enthielten und dies löste es für mich, danke! – thomh

+0

Nicht funktionieren in 'func searchBarCancelButtonClicked (searchBar: UISearchBar)' Protokoll – jose920405

2

Nicht perfekt, aber hat für meinen Fall funktioniert. Wird nicht funktionieren ohne dispatch_after

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { 
    if (!searchText.length) { 
     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
      [searchBar resignFirstResponder]; 
     }); 
    } 
} 

- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar { 
    [self performSearchWithString:searchBar.text]; 
    [searchBar resignFirstResponder]; 
} 
Verwandte Themen