1

ビューの下部に検索バーがあります。問題は、キーボードで何かを入力するたびに、検索バーが下部に残り、入力している内容を表示できないことです。キーボードがポップアップするたびに動的に上に移動し、キーボードが消えた後に元の位置に戻したいと思います。残念ながら、検索バーは私のアプリの下部にある必要があり、これに固執しています。

キーボードが表示されたときにのみ検索バーを上に移動する方法はありますか?コードスニペットはどれも本当に役に立ちます。

4

3 に答える 3

1

最善の策は、UISearchBarDelegateプロトコルで–searchBarShouldBeginEditing:を使用することです。

これは次のようになります:

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

編集:他の回答の1つは、UIKeyboard通知の使用を提案していますが、混乱を招く可能性があります。ただし、UISearchBarが最初のレスポンダーであるときだけでなく、キーボードが表示されるたびに機能するという利点があります。

編集2:Mayur Joshiは、アニメーションの使用を提案しています。これは、次のように実行できます。

[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:検索バーの背後のビューを隠したくない場合は、検索バーが上に移動するたびにその高さを縮小する必要があります。コードと同じ場所に配置して、検索バーをアニメーション化できます。

于 2011-09-16T06:35:19.277 に答える
0

こんにちは、この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];
    }
于 2011-09-16T06:35:06.327 に答える
-1

UIScrollViewを使用して、この検索バーをそのスクロールビューに保持する必要があります。ここで、検索バーの編集を開始すると、つまり、

 - (void) searchBarTextDidBeginEditing:(UISearchBar *)theSearchBar

SearchBarが次のように表示されるように、UIScrollViewのscrollRectToVisibleメソッドを設定します。

[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];  
于 2011-09-16T06:33:21.073 に答える