2010-08-06 17 views
11

que tienen un UITableView muy básico con un UISearchBar adjunto, y aquí está la corriente de lo que sucedeUISearchBar y resignFirstResponder

UITableView está vacía, el usuario toca UISearchBar, y hace subir teclado. Una vez que el usuario pulsa el botón de búsqueda

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

funciona muy bien, y se mueve el teclado fuera del camino, y rellena el UITableView. El problema es cualquier intento de búsqueda posterior.

Los mismos pasos que antes, sin embargo, el teclado nunca se descarta. Tengo la sensación de que algo más se está convirtiendo en el que responde, solo necesito un poco de claridad para comprender lo que realmente está ocurriendo.

Respuesta

29

Sin ver su código es difícil de adivinar. Sin embargo, si incluye:

[self.view endEditing:YES]; 

todas las vistas saldrán de la primera respuesta.

+0

esto funciona perfecto para mí! – Raptor

+0

He tenido problemas similares con las celdas UICollectionView que contienen UITextFields y esto lo resolvió para mí, ¡gracias! – thomh

+0

No funciona en el protocolo 'func searchBarCancelButtonClicked (searchBar: UISearchBar)' – jose920405

2

No es perfecto, pero funcionó para mi caso. No funcionará sin 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]; 
}