2010-08-06 13 views
11

Ho un UITableView molto semplice con un UISearchBar annesso, ed ecco il flusso di ciò che accadeUISearchBar e resignFirstResponder

UITableView è vuoto, utente tocca UISearchBar, e porta piano tastiera. Una volta che l'utente tocca il pulsante di ricerca

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

funziona bene, e sposta la tastiera fuori strada, e popola l'UITableView. Il problema è qualsiasi successivo tentativo di ricerca.

Gli stessi passaggi precedenti, tuttavia, la tastiera non viene mai chiusa. Ho la sensazione che qualcos'altro stia diventando il rispondente, ho solo bisogno di un po 'di chiarezza per capire cosa sta realmente accadendo.

risposta

29

Senza vedere il tuo codice è difficile da indovinare. Tuttavia, se si include:

[self.view endEditing:YES]; 

tutte le visualizzazioni si rassegnano alle prime risposte.

+0

questo funziona perfetto per me! – Raptor

+0

Ho avuto problemi simili con le celle UICollectionView contenenti UITextFields e questo lo ha risolto per me, grazie! – thomh

+0

Non funziona in 'func searchBarCancelButtonClicked (searchBar: UISearchBar)' il protocollo – jose920405

2

Non perfetto ma ha funzionato per il mio caso. Non funziona senza 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]; 
} 
Problemi correlati