2012-04-15 21 views
5

Beim Drücken der Suchleiste möchte ich die bereits eingegebene Zeichenfolge abrufen. Dafür verwende ich derzeit diese Methode:So erhalten Sie die aktuelle Suchleiste während der Eingabe

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range  replacementText:(NSString *)text 
{ 
    NSLog(@"String:%@",mainSearchBar.text); 
    return YES; 
} 

Aber es gibt die vorherige Zeichenfolge zurück. Zum Beispiel ID ich Typ "Jumbo", es zeigt Jumb und wenn ich die Rücktaste drücken, um ein Element zu löschen und es "jumb" machen, zeigt es Jumbo. d. h. die vorherige Zeichenfolge in der Suchleiste.

Was soll ich tun, um die aktuelle Zeichenfolge zu erhalten? Bitte Hilfe. Dank

+1

Warum verwenden Sie nicht '-searchBar: textDidChange:'? –

Antwort

12

Innerhalb der Methode, die Sie den eingegebenen Text mit bekommen:

NSString* newText = [searchBar.text stringByReplacingCharactersInRange:range withString:text] 

Swift 3:

let newText = (searchBar.text ?? "" as NSString).replacingCharacters(in: range, with: text) 
2

Versuchen mit:

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
    { 
     NSString *str = [mainSearchBar.text stringByReplacingCharactersInRange:range withString:text]; 
     NSLog(@"String:%@",str); 
     return YES; 
    } 
4

Die bequemste Methode delegieren Um den neuen Text von zu erhalten, ist:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 

Sowohl [searchBar text] und searchText den neu eingegebenen Text zurück. shouldChangeTextInRange meldet absichtlich den alten Text, weil Sie damit die Bearbeitung abbrechen können, bevor sie stattfindet.

0

Swift 3-Version:

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String){ 
    print("searchText: \(searchText)") 
} 

Diese wird ausgelöst, wenn die Textänderungen in der Suchleiste.

Verwandte Themen