- [UITableView scrollToRowAtIndexPath:]滚动,但返回第1行

时间:2009-01-26 05:55:25

标签: cocoa-touch

我在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;
}

有人可以告诉我可能出现的问题吗?任何见解都会有所帮助。

由于

2 个答案:

答案 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];