2010-08-06 18 views
11

J'ai un UITableView très basique avec un joint UISearchBar, et voici le flux de ce qui se passeUISearchBar et resignFirstResponder

UITableView est vide, robinets utilisateur UISearchBar et apporte au clavier. Une fois que l'utilisateur tape sur le bouton Rechercher

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

fonctionne très bien, et déplace le clavier hors du chemin, et renseigne le UITableView. Le problème est toute tentative de recherche ultérieure.

Les mêmes étapes que précédemment se produisent, mais le clavier n'est jamais fermé. J'ai le sentiment que quelque chose d'autre devient le répondeur, j'ai juste besoin d'un peu de clarté pour comprendre ce qui se passe réellement.

Répondre

29

Sans voir votre code, il est difficile de deviner. Cependant, si vous incluez:

[self.view endEditing:YES]; 

toutes les vues seront démissionner du premier répondeur.

+0

cela fonctionne parfait pour moi! – Raptor

+0

J'ai eu des problèmes similaires avec les cellules UICollectionView contenant UITextFields et cela a résolu pour moi, merci! – thomh

+0

Ne fonctionne pas dans 'func searchBarCancelButtonClicked (searchBar: UISearchBar)' protocole – jose920405

2

Pas parfait mais a travaillé pour mon cas. Ne fonctionnera pas sans 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]; 
}