哪个代理要覆盖以调整自动滚动?

时间:2013-10-23 02:50:59

标签: ios iphone uitableview uiscrollview uitextfield

我对此问题感到非常沮丧,我希望有人可以帮助我。

从第一个屏幕可以看到原点光标位置在密码

enter image description here

将光标移动到电子邮件后,屏幕移动了一点,如屏幕截图2所示

enter image description here

我试图覆盖“textFieldDidBeginEditing” 甚至将观察者添加到“keyboardWillShow通知”中以获得对键盘显示的一些控制。 但两者都不起作用。它仍然只是略微下降,我想要的更多。我注意到只有当整个textField可见时才覆盖/隐藏半行,只有正确调用“textFieldDidBeginEditing”才会起作用。

我想必须有一些与tableView / ScrollView相关或与键盘或UIResponder相关的委托方法,我不确定,但需要有经验的开发人员的帮助。

由于

2 个答案:

答案 0 :(得分:1)

看起来您正在使用分组表格视图。当它成为第一响应者时,它们会自动将文本字段滚动到可见状态。但是,正如您已经发现的那样,这意味着如果文本字段在屏幕上只有一半,它只会在顶部(或底部)一直滚动它。如果您希望它始终显示在屏幕上的特定点,您需要自己计算和设置偏移量。但是,如果直接从textFieldDidBeginEditing回调中执行,它将被表的默认滚动覆盖,因此我们稍微延迟它。

-(void) textFieldDidBeginEditing:(UITextField *)textField
{
    double delayInSeconds = 0.01;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        CGRect bounds = textField.bounds;
        CGPoint offset = [self.tableView convertPoint:bounds.origin fromView:textField];
        offset.x = 0;
        offset.y -= 150;
        [self.tableView setContentOffset:offset animated:YES];
    });
}

请注意,iOS 7的表滚动有点儿错误,所以这可能会引起一些跳跃。你可以通过增加延迟直到自动滚动之后减少跳跃,0.25s应该是好的。

答案 1 :(得分:0)

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

     //if you just want to set the contentOffset when editing emailField add following condition
    if (textField==emailField) {

        float yOffSet = someValue;     

        [mytableView setContentOffset:CGPointMake(0.0f, yOffSet)];

        [emailField becomeFirstResponder];

    }