当键盘在屏幕上时滚动到滚动视图/滚动视图中的特定文本字段停止滚动

时间:2010-01-01 05:20:58

标签: iphone scrollview

我被困在这里,

我在视图中有一个自定义滚动视图,此滚动视图有一个添加字段按钮,允许用户将新文本字段添加到滚动视图。当用户点击某个特定的文本字段时,键盘出现并隐藏文本字段,为了克服这个问题,我按照UICatalog示例进行了操作,但它将整个滚动视图向上移动

为了防止这种情况,我按照UICatalog示例进行了操作

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

if (sender.frame.origin.y>109) {
    moveScrollViewUpBy=(sender.frame.origin.y-109+10);

    [self viewMovedUp:YES];
}
}


-(void)viewMovedUp:(BOOL)movedUp
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];

CGRect rect = formScrollView.frame;
if (movedUp)
{
    if(rect.origin.y == 0.0f){
        rect.origin.y -= kOFFSET_FOR_KEYBOARD;
        rect.size.height += kOFFSET_FOR_KEYBOARD;
    }
}
else
{
    if(rect.origin.y != 0.0f){
        rect.origin.y += kOFFSET_FOR_KEYBOARD;
        rect.size.height -= kOFFSET_FOR_KEYBOARD;
    }
}
self.formScrollView = rect;


[UIView commitAnimations];
}

这里

#define kOFFSET_FOR_KEYBOARD    160.0

但这会将滚动视图向上移动,

我希望当我在滚动视图中点击下方的文本字段时...滚动视图滚动并显示该文本字段....

是否可以这样做....否则建议我一些其他解决方案

我还有一个查询srollview只是在键盘停留在屏幕上时停止滚动。有没有办法克服这个

2 个答案:

答案 0 :(得分:2)

您可能只想设置scrollView的contentOffset属性,而不是调整其边界。

答案 1 :(得分:1)

实施UITextViewDelegate并执行以下操作:

- (void)textViewDidBeginEditing:(UITextView *)textView {

    keyboardShowing = YES; //helper ivar
    [self sizeToOrientation];
    [self.scrollView scrollRectToVisible:textView.frame animated:YES];
}

- (void)textFieldDidEndEditing:(UITextField *)textField {
    keyboardShowing = NO;
    [self sizeToOrientation];
}

帮助方法:

//fit to the appropriate view sizes
- (void)sizeToOrientation {
    CGSize size;
    if( keyboardShowing )
        size = CGSizeMake(320, 190); //make room for keyboard
    else
        size = CGSizeMake(320, 420); //full height with tabbar on bottom

    self.scrollView.frame = CGRectMake(0, 0, size.width, size.height);
}

这适合我。