如何在键盘到达TextFields时向上移动查看?

时间:2014-03-07 14:09:59

标签: ios iphone uitextfield

我在scrollView上有10个文本字段。我想在键盘出现在Textfileds上时滚动视图。在这里,我使用以下代码来实现这一目标。但它正在从第一个Textfield移动屏幕我的要求是我想在键盘越过文本字段时向上移动视图,否则我不想移动视图。 请帮帮我。

- (void)textFieldDidBeginEditing:(UITextField *)textField
{

    CGPoint scrollPoint = CGPointMake(0, textField.frame.origin.y);
    [myScrollView setContentOffset:scrollPoint animated:YES];
}

3 个答案:

答案 0 :(得分:1)

这样的事可能吗? (您可能需要重新设置为横向模式)

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    CGFloat keyboardHeight = 216.0;
    CGFloat viewHeight = myScrollView.frame.size.height;

    BOOL covering = (textField.frame.origin.y - myScrollView.contentOffset.y) > (viewHeight - keyboardHeight);

    if(covering) {
       CGPoint scrollPoint = CGPointMake(0, textField.frame.origin.y);
       [myScrollView setContentOffset:scrollPoint animated:YES];
    }
}

答案 1 :(得分:0)

当出现键盘时,使用键盘通知进行提醒,例如:

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

(同时在viewWillDissapear:

中删除这些内容
[[NSNotificationCenter defaultCenter] removeObserver:UIKeyboardWillShowNotification];
[[NSNotificationCenter defaultCenter] removeObserver:UIKeyboardWillHideNotification];

然后分别在函数中:

- (void)keyboardWillShow:(NSNotification *) notification {

    CGRect appFrame = YOUR_VIEWS_FRAME

    CGRect keyboardFrame = [notification.userInfo[UIKeyboardFrameEndUserInfoKey]   CGRectValue];
    keyboardFrame = [self.view.window convertRect:keyboardFrame toView:self.view];

    UITextField *current = THE_CURRENT_RESPONDER

    CGRect relativeFrame = [self.view convertRect:current.frame fromView:current.superview];

    float difference = 0.0;

    //Here we give it a 20 pixel padding between the top of the keyboard and the bottom of the text field.
    if (CGRectIntersectsRect(relativeFrame, keyboardFrame))
        difference = appFrame.size.height - keyboardFrame.size.height - 20 - relativeFrame.size.height - current.frame.origin.y;

    difference = difference < 0 ? difference : 0;

    NSTimeInterval duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    [UIView animateWithDuration:duration animations:^{
        [self.scrolLView setContentOffset:CGPointMake(0, difference);
    } completion:^(BOOL finished) {
    }];
}

- (void)keyboardWillHide:(NSNotification *) notification {
    NSTimeInterval duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    [UIView animateWithDuration:duration animations:^{
       [self.scrolLView setContentOffset:CGPointZero];
    } completion:^(BOOL finished) {
 }];
}

答案 2 :(得分:0)

现在已经有了解决方案。

您可以使用TPKeyboardAvoiding来完成任务。