我有一个分割视图控制器:查看& tableview。在这个表格视图中,我有自定义单元格和文本字段。我不知道我会有多少个细胞,所以它会自动生成。现在我试图滚动到文本框,当它成为FirstResponder。我试过这样的事情:获取单元格或文本字段在此单元格中的位置
-(void) textFieldDidBeginEditing:(UITextField *)textField {
CGPoint focusOnTextField = CGPointMake(0, 300 + textField.frame.origin.y);
[scroller setContentOffset: focusOnTextField animated: YES];
}
300px - 我的TableView的开始位置。所有似乎都没问题,但textField.frame.origin.y
总是等于0(像和bounds.origin.y
顺便说一句)。
我以为我可以解决一个问题,如果获取单元格的位置,哪个文本字段是活动的,然后替换textField.frame.origin.y
在cell.frame.origin.y
或类似的东西。
============================================= ======================
我忘了说,我的tableviews滚动被禁用。我遵循你的建议和代码示例,并像这样解决:
- (UITableViewCell *)cellWithSubview:(UIView *)subview {
while (subview && ![subview isKindOfClass:[UITableViewCell self]])
subview = subview.superview;
return (UITableViewCell *)subview;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField {
UITableViewCell *activeCell = [self cellWithSubview:textField];
float offsetValueY = 200 + activeCell.origin.y;
CGPoint focusOnTextField = CGPointMake(0, offsetValueY);
[scroller setContentOffset:focusOnTextField animated:YES];
}
而且知道什么?它正在工作! :-)但它造成了一个新问题。当我开始编辑文本框时,滚动条首先跳到顶部,然后才转到正确的位置。当我写[scroller setContentOffset:focusOnTextField animated:NO];
这个问题消失了,但是没有平滑的滚动条。这对我来说很糟糕:-)那么我们如何解决它呢?