我在tableview中有一个带有textfields的分组表视图。为了使键盘不隐藏文本字段,在textFieldShouldBeginEditing中,我调用scrollToRowAtIndexPath方法并将正在编辑的行的滚动位置设置为tableview的顶部。
滚动确实发生了,但是一旦键盘出现(即一旦textFieldShouldBeginEditing返回YES),表格就会滚动回原来的位置并显示第一部分的第一行。在调用scrollToRowAtIndexPath之后,我没有调用reloadTable。
问题仅发生在第4行和第5行(bdate和zip),password2按预期工作。
这是我用来滚动到特定行的代码
if(textField == password2){
indPath = [NSIndexPath indexPathForRow:3 inSection:0];
[self.tableView scrollToRowAtIndexPath:indPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
return YES;
}
else if(textField == bdate){
indPath = [NSIndexPath indexPathForRow:4 inSection:0];
[self.tableView scrollToRowAtIndexPath:indPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
return YES;
}
else if(textField == zip){
indPath = [NSIndexPath indexPathForRow:5 inSection:0];
[self.tableView scrollToRowAtIndexPath:indPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
return YES;
}
有人可以告诉我可能出现的问题吗?任何见解都会有所帮助。
由于
答案 0 :(得分:5)
我怀疑正在发生的事情是桌面视图是橡皮筋,就像Safari中的webview一样,当你运行它的边界时。最可能的原因是,当您弹出键盘时,它位于表视图的顶部,但表视图没有物理收缩,因此所有UITableViewCell都适合部分遮挡的UITableView,当其中一些滚动时它是橡皮筋所以它们都在其中。
为了测试这个,尝试减小列表视图的大小,以便在显示键盘时可以看到整个内容,如果bug消失,你想编写动态改变大小的代码,因为键盘动画了然后出去。
答案 1 :(得分:0)
//For iOS 7
[self.TableView reloadData];
NSIndexPath *indexPat = [NSIndexPath indexPathForRow:1 inSection:1];
[self.TableView scrollToRowAtIndexPath:indexPat atScrollPosition:UITableViewScrollPositionTop animated:YES];