2010-10-02 17 views
7

İçinde herhangi bir karakter bulunmayan bir String araması yapabilmek istiyorum. Sorun şu ki, UISearchBar'da hiçbir şey yazılmadığında, varsayılan klavye arama düğmesini göstermiyor.iPhone: UISearchBar "" String nasıl aranır?

Herhangi bir fikrin var mı?

sayesinde Markus

+0

Neden hiçbir şey aramak istersin? – BoltClock

+5

boş bir arama dizesi her şeyi döndürdüğü için ... arama bir filtreye benziyor ... – Markus

cevap

18

Neyse ki, tam olarak bunu yapan kod üzerinde çalışıyorum. Bu bir hack biraz, ama sen, UISearchBar içinde gömülü UITextField bulmak sonra enablesReturnKeyAutomatically kapatabilirsiniz:

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

Bu cevabı da beğeniyorum, ancak kullanıcı deneyimi açısından sezgisel olduğunu sanmıyorum. – Jordan

+1

Bunu tamamen başka bir amaç için kullandım: klavyeyi bir UISearchBar ile ilk kez görüntülerken, varsayılan olarak [searchBarTextField beenFirstResponder] öğesini arayarak klavyeyi açmak. Aşırı yüklenemedikleri gerçek bir gizem, UISearchBar için doğru şeyi yapmak ve klavyeyi göstermek için ilk yanıtlayıcı oldu. Teşekkürler! –

1

türü * ve kullandıkları "" (hiçbir şey) için programda yer tutucu olarak.

0

"" için arama, nil/NULL aranması gibidir: sorgu boş veya boş olan tüm girdileri döndürür.

* en arama İşaretlemelerde kullanılan bir joker karakterdir ve tüm maçları dönersiniz.

+1

Daha da açıklığa kavuşturmak için, "" "' ** değil ** nil/NULL, ama * boş dizge olarak kabul edilir * (boş dize). – Sean

+0

Normalde, daha fazla karakter eklendikçe, filtre uygulanmış set sayımda azalır. Sonuç olarak, tüm arama karakterleri kaldırılırsa, "doğal olarak" olması gereken, filtre uygulanmamış kümenin tamamının döndürülmesidir. yani. Hiçbir şey aramak, sezgisel olarak filtrenin yokluğuyla daha yakından hizalanır. –

0

bir metin ararken. otomatik

0

bu i boş kadar gerisilme üzerine klavyeyi çıkarmak için

ne yaptığını böylece çalıştırmak olacak

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

üzerinde çalışmak gerekir ... karakter olmadan bir dize aramak zordur :

ayrıca m (aynı temsilci için UISearchBar içinde UITextField ayarlamak bu temsilciye eklemek için hatırlamak gerekir
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    if ([searchText isEqualToString:@""]) { 
     [searchBar resignFirstResponder]; 
    } 
} 

y kodun bağlam temsilci

7

Daniels cevap mükemmel çalışır öz)

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

bu tetikleyici herhangi aramanızı gerçekleştirirken bu dizeyi "" için temsilci

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

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

eklemenin şudur iOS 7'a kadar.

iOS 7 Güncelleme

- (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; 
}