iPhone: UISearchBar, как искать "" строку? - PullRequest
7 голосов
/ 02 октября 2010

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

Есть идеи?

Спасибо, Markus

Ответы [ 6 ]

19 голосов
/ 03 октября 2010

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

UITextField *searchBarTextField = nil;
for (UIView *subview in searchBar.subviews)
{
    if ([subview isKindOfClass:[UITextField class]])
    {
        searchBarTextField = (UITextField *)subview;
        break;
    }
}
searchBarTextField.enablesReturnKeyAutomatically = NO;
7 голосов
/ 24 октября 2013

Дэниелс ответ отлично работает до iOS 7 .

Обновление iOS 7

- (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;
}
1 голос
/ 03 октября 2010

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

0 голосов
/ 20 ноября 2012

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

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

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

вам также нужно будет установить ваше поле uitext в пределах вашей панели uisearch для того же делегата, не забудьте добавить к этому делегату (в контексте моего кода делегат self)

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

когда любой из этих триггеров, выполните поиск "" строки

0 голосов
/ 20 августа 2012

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

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

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

0 голосов
/ 03 октября 2010

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

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

...