2009-01-26 48 views
4

我在tableview中有一个带有文本框的分组表格视图。为了让键盘不隐藏文本字段,在textFieldShouldBeginEditing中,我调用了scrollToRowAtIndexPath方法,并将正在编辑的行的滚动位置设置为tableview的顶部。- [UITableView scrollToRowAtIndexPath:]滚动,但返回第1行

滚动确实发生,但只要键盘出现(即一旦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

你有没有解决过这个问题?你最终如何实现路易斯的答案? – cheeesus 2012-05-01 12:16:15

回答

5

我怀疑是怎么回事的是,表视图是橡胶条带回来,就像在Safari网页视图功能在运行通过其边界。最可能的原因是,当你弹出键盘时,它在表格视图的顶部,但表格视图没有物理收缩,因此所有的UITableViewCells都适合部分模糊的UITableView,并且当它们中的一些滚动时它橡皮筋,所以他们都在其中。

为了测试这个尝试减少列表视图的大小,以便您可以在键盘显示时看到整个事物,如果错误消失,您希望编写动态更改键盘动画大小的代码进进出出。

+0

嗨。在我指定的代码中,password2位于bdate和zip字段的上方,zip之后的单元格更多。 zip是视图第一次显示时可见的最后一个单元格。这可能是其他观点尚未得出的原因,导致表格反弹?如果没有,那么为什么不把它移开? – lostInTransit 2009-02-01 03:58:29

0
//For iOS 7 
     [self.TableView reloadData]; 
     NSIndexPath *indexPat = [NSIndexPath indexPathForRow:1 inSection:1]; 
     [self.TableView scrollToRowAtIndexPath:indexPat atScrollPosition:UITableViewScrollPositionTop animated:YES];