当键盘打开时,iPhone会向上滚动视图

时间:2010-05-11 18:06:06

标签: iphone view scroll

我知道这个问题非常普遍,我已经阅读了很多答案,但我很难理解代码是如何工作的。这有效:

-(void)textFieldDidBeginEditing:(UITextField *)sender
{
if ([sender isEqual:txtLeaveAddyLine1])
{
    //move the main view, so that the keyboard does not hide it.
    if  (self.view.frame.origin.y >= 0)
    {
        [self setViewMovedUp:YES];
    }
} 
}

在这个例子中,txtLeaveAddy是第一个被键盘隐藏的UITextField,它就像一个魅力。当我循环浏览屏幕上的文本字段时,当用户进入txtLeaveAddyLine1字段时,它会向上滚动。但是,当我尝试添加txtLeaveAddyLine1字段下面的字段时 - 没有任何反应。例如:

-(void)textFieldDidBeginEditing:(UITextField *)sender
{
    if ([sender isEqual:txtLeaveAddyLine1])
    {
        //move the main view, so that the keyboard does not hide it.
        if  (self.view.frame.origin.y >= 0)
        {
            [self setViewMovedUp:YES];
        }
    } 
    if ([sender isEqual:txtLeaveAddyLine2])
    {
        //move the main view, so that the keyboard does not hide it.
        if  (self.view.frame.origin.y >= 0)
        {
            [self setViewMovedUp:YES];
        }
    } 
}

我没有正确使用此功能吗?

3 个答案:

答案 0 :(得分:2)

执行此操作的常用方法是在表格视图中显示文本字段。当文本字段开始编辑时,获取它所在单元格的索引路径并调用:

[tableView scrollToRowAtIndexPath:indexPath 
                 atScrollPosition:UITableViewScrollPositionMiddle 
                         animated:YES];

答案 1 :(得分:2)

答案 2 :(得分:0)

setViewMovedUp不是内置的 - 我认为它来自Apple样本的代码。 (如果您的版本与我发现的版本不同,则以下内容可能不适用...)

它不会神奇地移动到正确的位置,它只是将视图移动一个固定的量。我想您需要查看该函数并确定您需要为每个字段移动视图的距离,然后根据字段位置修改视图以更改移动视图的数量。使用select case语句硬连接简单的东西,或传入发送者并查看其框架以找出将视图移动到的位置。