2010-10-02 19 views
7

Ich möchte in der Lage sein, nach einem String ohne irgendein Zeichen zu suchen. Das Problem ist, dass die Standardtastatur die Suchschaltfläche nicht anzeigt, wenn in der UISearchBar nichts geschrieben ist.iPhone: UISearchBar So suchen Sie nach "" String?

Irgendeine Idee?

Danke, Markus

+0

Warum wollen Sie nichts suchen? – BoltClock

+5

weil ein leerer Suchstring alles zurückgibt ... die Suche ist wie ein Filter ... – Markus

Antwort

18

Zum Glück habe ich zufällig gerade an Code gearbeitet, der genau das tut. Es ist ein bisschen wie ein Hack, aber Sie können die UITextField finden, die innerhalb der UISearchBar eingebettet ist, dann schalten Sie enablesReturnKeyAutomatically:

UITextField *searchBarTextField = nil; 
for (UIView *subview in searchBar.subviews) 
{ 
    if ([subview isKindOfClass:[UITextField class]]) 
    { 
     searchBarTextField = (UITextField *)subview; 
     break; 
    } 
} 
searchBarTextField.enablesReturnKeyAutomatically = NO; 
+0

Ich mag diese Antwort auch, aber ich denke nicht, dass es aus Sicht der Benutzerfreundlichkeit intuitiv ist. – Jordan

+1

Ich habe dies für einen ganz anderen Zweck verwendet: um die Tastatur standardmäßig zu öffnen, wenn ich zuerst eine Ansicht mit einer UISearchBar zeige, indem ich [searchBarTextField nextFirstResponder] aufruft. Ein echtes Mysterium, warum sie nicht überlastet wurden, war FirstResponder für UISearchBar, um das Richtige zu tun und die Tastatur zu zeigen. Vielen Dank! –

1

Typ * und verwenden, die als Platzhalter in Ihrem Programm für "" (nichts).

0

Suchen nach "" ist wie Suchen nach Null/NULL: die Abfrage wird alle Einträge zurückgeben, die leer oder null sind.

Die * ist ein Wildcard Charakter in den meisten Such Markups verwendet, und es wird Rückkehr alle Spiele.

+1

Nur um weiter zu klären, '' '' ist ** nicht ** nil/NULL, aber es gilt als * null string * (leer Zeichenfolge). – Sean

+0

Normalerweise, wenn mehr Zeichen hinzugefügt werden, verringert sich die Anzahl der gefilterten Mengen. Wenn also alle Suchzeichen entfernt werden, sollte "natürlich" passieren, dass die gesamte ungefilterte Menge zurückgegeben wird. dh. die Suche nach nichts ist intuitiv näher an der Abwesenheit von Filtern ausgerichtet. –

0

, während ein Text zu suchen. es ist schwierig, einen String ohne Zeichen zu suchen ... so müssen Sie

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    //write code here 
} 

es

0

dies automatisch läuft auf Arbeit, was ich tat

Tastatur bis leer auf Backspace entfernen :

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    if ([searchText isEqualToString:@""]) { 
     [searchBar resignFirstResponder]; 
    } 
} 

Sie auch auf diese Delegierten (in m hinzufügen müssen Ihre UITextField innerhalb Ihrer UISearchBar auf den gleichen Delegierten setzen, erinnern y Code Kontext der Delegat ist selbst)

for (UIView *view in searchBar.subviews){ 
     if ([view isKindOfClass: [UITextField class]]) { 
      UITextField *tf = (UITextField *)view; 
      tf.delegate = self; 
      break; 
     } 
    } 

folgt, fügen Sie diese an Ihre Delegierten

- (void)searchBarCancelButtonClicked:(UISearchBar *) aSearchBar { 
    [aSearchBar resignFirstResponder]; 
} 

-(BOOL)textFieldShouldClear:(UITextField *)textField 
{ 
    [self performSelector:@selector(searchBarCancelButtonClicked:) withObject:textField.superview afterDelay: 0.1]; 
    return YES; 
} 

, wenn einer dieser Trigger, um die Suche durchführen für "" string

7

Daniels Antwort funktioniert perfekt bis iOS 7.

iOS 7 Update

- (void)searchBarTextDidBeginEditing:(UISearchBar *) bar 
{ 
    UITextField *searchBarTextField = nil; 

    NSArray *views = ([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0f) ? bar.subviews : [[bar.subviews objectAtIndex:0] subviews]; 

    for (UIView *subview in views) 
    { 
     if ([subview isKindOfClass:[UITextField class]]) 
     { 
      searchBarTextField = (UITextField *)subview; 
      break; 
     } 
    } 
    searchBarTextField.enablesReturnKeyAutomatically = NO; 
} 
Verwandte Themen