0

にいくつかUITextFieldsありUIScrollViewます。それらの1つを編集してキーボードがポップアップすると、フィールドがキーボードで覆われます。

ビューを上にスクロールしたいのですが、これは iOS によって自動的に行われると思っていましたが、そうではないようです。

現在、このメソッドを使用してビューをスクロールしていますが、うまく機能しません。

- (void)scrollToView:(UIView *)view
{
    CGRect viewFrame = [[edit scrollView] convertRect:[view frame] fromView:[view superview]];

    CGRect finalFrame = CGRectMake(viewFrame.origin.x, viewFrame.origin.y, viewFrame.size.width, (viewFrame.size.height + (inputAccessory.frame.size.height) + 4.0));

    [[edit scrollView] scrollRectToVisible:finalFrame animated:YES];
}

ありがとう

4

5 に答える 5

2

私の場合、次のようにscrollView、 のEditing Did Beginイベントでのサイズを縮小しUITextFieldます。

- (IBAction)didEnterInTextField:(id)sender
{
    [sender becomeFirstResponder];
    // Resize the scroll view to reduce the keyboard height
    CGRect scrollViewFrame = self.scrollView.frame;
    if (scrollViewFrame.size.height > 300) {
        scrollViewFrame.size.height -= 216;
        self.scrollView.frame = scrollViewFrame;
    }

    // Scroll the view to see the text field
    UITextField *selectedTextField = (UITextField *)sender;
    float yPosition = selectedTextField.frame.origin.y - 60;
    float bottomPositon = self.scrollView.contentSize.height - self.scrollView.bounds.size.height;
    if (yPosition > bottomPositon) {
        yPosition = bottomPositon;
    }
    [self.scrollView setContentOffset:CGPointMake(0, yPosition) animated:YES];
}
于 2013-01-07T12:13:03.800 に答える
1

これは同じことに関する素晴らしいチュートリアルです

http://www.iphonesampleapps.com/2009/12/adjust-uitextfield-hidden-behind-keyboard-with-uiscrollview/

お役に立てば幸いです

于 2013-01-07T12:12:37.320 に答える
1

このサンプル コードを試してくださいTPKeyboardAvoiding

実装は簡単です。カスタム クラスをドラッグ アンド ドロップし、Custom クラスを UIScrollview からTPKeyboardAvoidingScrollViewxib に変更するだけです。

于 2013-01-07T12:25:53.363 に答える
0

//キーボード通知に登録します

[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(keyboardWillShow:)
                                             name:UIKeyboardWillShowNotification
                                           object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(keyboardWillHide:)
                                             name:UIKeyboardWillHideNotification
                                           object:nil];

これらの2つの方法でスクロールビューのフレームを設定します。キーボードが表示または非表示になるとき。

またはスクロールビューのscrollRectToVisibleを設定します

于 2013-01-07T12:12:05.667 に答える
0
- (void)scrollViewToCenterOfScreen:(UIView *)theView
{
    CGFloat viewCenterY = theView.center.y;
    CGFloat availableHeight;
    CGFloat y;

    if(!isReturned)
    {
        if (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)
        {
            availableHeight = 1080;
        }
        else
        {
            availableHeight = 220;
        }
    }
    else
    {
        if (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)
        {
            availableHeight = 1400;
        }
        else
        {
            availableHeight = 530;
        }

    }

    y = viewCenterY - availableHeight / 2.0;
    if (y < 0) {
        y = 0;
    }
    [sclView setContentOffset:CGPointMake(0, y) animated:YES];
}

テキストフィールドまたはテキストビューでこのメソッドを呼び出して編集を開始します。

于 2013-01-07T12:30:48.957 に答える