我知道这个问题非常普遍,我已经阅读了很多答案,但我很难理解代码是如何工作的。这有效:
-(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];
}
}
}
我没有正确使用此功能吗?
答案 0 :(得分:2)
执行此操作的常用方法是在表格视图中显示文本字段。当文本字段开始编辑时,获取它所在单元格的索引路径并调用:
[tableView scrollToRowAtIndexPath:indexPath
atScrollPosition:UITableViewScrollPositionMiddle
animated:YES];
答案 1 :(得分:2)
http://www.iphonesampleapps.com/2009/12/adjust-uitextfield-hidden-behind-keyboard-with-uiscrollview/
答案 2 :(得分:0)
setViewMovedUp不是内置的 - 我认为它来自Apple样本的代码。 (如果您的版本与我发现的版本不同,则以下内容可能不适用...)
它不会神奇地移动到正确的位置,它只是将视图移动一个固定的量。我想您需要查看该函数并确定您需要为每个字段移动视图的距离,然后根据字段位置修改视图以更改移动视图的数量。使用select case语句硬连接简单的东西,或传入发送者并查看其框架以找出将视图移动到的位置。