Клавиатура iPhone скрывает UISeachBar - PullRequest
1 голос
/ 16 сентября 2011

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

Есть ли способ переместить строку поиска вверх только при появлении клавиатуры?Любые фрагменты кода будут очень полезны.

Ответы [ 3 ]

1 голос
/ 16 сентября 2011

Лучше всего, вероятно, использовать –searchBarShouldBeginEditing: в протоколе UISearchBarDelegate.

Это будет выглядеть примерно так:

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
    CGRect newFrame = //some rect
    mySearchBar.frame = newFrame;
    return YES;//this is important!
}
- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar {
    CGRect originalFrame = //the original frame
    mySearchBar.frame = originalFrame;
    return YES;
}

РЕДАКТИРОВАТЬ: один из других ответов предлагает использоватьуведомления UIKeyboard, но это может сбить с толку.Это, однако, дает преимущество работы при каждом появлении клавиатуры, а не только когда UISearchBar является первым респондентом.

РЕДАКТИРОВАТЬ 2: Майур Джоши предлагает использовать анимацию, что можно сделать так:

[UIView animateWithDuration:duration
            animations:^{ 
                //what you want to animate (in this case, the search bar's frame)
            } 
            completion:^(BOOL finished){
                //what to do when the animation finishes
            }];

РЕДАКТИРОВАТЬ 3: Если вы не хотите скрывать вид за панелью поиска, вам придется уменьшать его высоту всякий раз, когда панель поиска перемещается вверх.Он может идти там же, где и код, для анимации панели поиска.

0 голосов
/ 16 сентября 2011

Привет, попробуй это sBar - это объект UISearchBar.

    - (void)keyboardWillShow:(NSNotification *)aNotification 
    {
        // the keyboard is showing so resize the table's height
        CGRect keyboardRect = [[[aNotification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
        NSTimeInterval animationDuration =
        [[[aNotification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
        CGRect frame = sBar.frame;
        NSLog(@"%f",frame.size.height);
        NSLog(@"%f",frame.origin.y);
        frame.origin.y=frame.origin.y- keyboardRect.size.height;
        [UIView beginAnimations:@"ResizeForKeyboard" context:nil];
        [UIView setAnimationDuration:animationDuration];
        sBar.frame = frame;
        NSLog(@"%f",frame.size.height);
        NSLog(@"%f",frame.origin.y);
        [UIView commitAnimations];
    }

    - (void)keyboardWillHide:(NSNotification *)aNotification
    {
        // the keyboard is hiding reset the table's height
        CGRect keyboardRect = [[[aNotification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
        NSTimeInterval animationDuration =
        [[[aNotification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
        CGRect frame = sBar.frame;
        NSLog(@"%f",frame.size.height);
        NSLog(@"%f",frame.origin.y);
        frame.origin.y=frame.origin.y+ keyboardRect.size.height;
        [UIView beginAnimations:@"ResizeForKeyboard" context:nil];
        [UIView setAnimationDuration:animationDuration];
        sBar.frame = frame;
        NSLog(@"%f",frame.size.height);
        NSLog(@"%f",frame.origin.y);

        [UIView commitAnimations];
    }
0 голосов
/ 16 сентября 2011

Вам нужно будет использовать UIScrollView и держать эту строку поиска в этом виде прокрутки.Теперь, когда вы начинаете редактировать панель поиска, то есть

 - (void) searchBarTextDidBeginEditing:(UISearchBar *)theSearchBar

, установите метод scrollRectToVisible для UIScrollView, чтобы сделать панель поиска видимой, как этот ...

[yourScrollView scrollRectToVisible:CGRectMake(0, 300, yourScrollView.frame.size.width, yourScrollView.frame.size.height) animated:YES];    

А когда вы написали текст в строке поиска, то есть

 - (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar1

, установите представление прокрутки scrollRectToVisible в его исходный размер.

[yourScrollView scrollRectToVisible:CGRectMake(0, 0, yourScrollView.frame.size.width, yourScrollView.frame.size.height) animated:YES];  
...