0

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

正如您从第一个屏幕中看到的,原光标位置在密码中

在此处输入图像描述

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

在此处输入图像描述

我试图覆盖“textFieldDidBeginEditing”,甚至将观察者添加到“keyboardWillShow 通知”以控制键盘的显示。但两者都不起作用。它仍然移动了一点点,我想要的是更多。我注意到的是,如果整个 textField 可见并且“textFieldDidBeginEditing”被正确调用,则只有在半行被覆盖/隐藏时它才不起作用。

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

谢谢

4

2 回答 2

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 应该是好的。

于 2013-10-23T14:16:53.337 回答
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];

    }
于 2013-10-23T14:28:05.060 回答