2010-10-02 2 views
7

Я хочу, чтобы иметь возможность искать строку без символа в ней. Проблема в том, что клавиатура по умолчанию не отображает кнопку поиска, когда в UISearchBar ничего не написано.iPhone: UISearchBar, как искать "" String?

Любая идея?

Спасибо, Markus

+0

Почему вы хотите найти ничего? – BoltClock

+5

, потому что пустая строка поиска возвращает все ... поиск похож на фильтр ... – Markus

ответ

18

К счастью, я просто работал над кодом, который делает именно это. Это немного рубить, но вы можете найти UITextField, который встроен в UISearchBar, затем выключите enablesReturnKeyAutomatically:

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

Мне тоже нравится этот ответ, но я не думаю, что он интуитивно понятен с точки зрения пользователя. – Jordan

+1

Я использовал это для совершенно другой цели: вскрыть клавиатуру по умолчанию при первом показе представления с помощью UISearchBar, вызвав [searchBarTextField статьFirstResponder]. Настоящая загадка, почему они не перегрузили startFirstResponder для UISearchBar, чтобы сделать правильную вещь и показать клавиатуру. Благодаря! –

1

Тип * и использовать его в качестве заполнителя в вашей программе "" (ничего).

0

Поиск "" походит на поиск nil/NULL: запрос вернет все записи, которые пусты или null.

* является характером а подстановочных используются в большинстве поисковых наценки, и он будет возвращать все матчи.

+1

Просто для уточнения далее: '' '' is ** not ** nil/NULL, но считается * пустой строкой * (пустой строка). – Sean

+0

Обычно, когда добавляется больше символов, отфильтрованный набор уменьшается в счетчике. Следовательно, если все символы поиска удалены, то что должно произойти «естественно», так это то, что возвращается весь нефильтрованный набор. то есть. поиск ничего не интуитивно более тесно связан с отсутствием фильтра. –

0

при поиске текста. трудно найти строку без символа ... так что вы должны работать на

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

он будет работать автоматически

0

это то, что я сделал

Чтобы удалить клавиатуру на забой до пустой :

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

вам также потребуется установить UITextField в вашем uisearchbar к тому же делегату, не забудьте добавить к этому делегату (в м Контекст Y Кодекса делегат сам)

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

после этого добавить их к своему делегату

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

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

, когда любые из этого триггера, выполнить свой поиск для «» строк

7

Daniels ответа отлично работает до 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; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^