3

我被困在这里,

我在视图中有一个自定义滚动视图,此滚动视图有一个添加字段按钮,可让用户将新文本字段添加到滚动视图。当用户点击特定的文本字段键盘出现并隐藏文本字段时,为了克服这个问题,我遵循 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 只是在键盘停留在屏幕上时停止滚动。有什么办法可以克服这个

4

2 回答 2

2

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

于 2010-01-01T06:09:27.360 回答
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);
}

这对我很有效。

于 2010-01-01T10:47:48.687 回答