我在一个UITableViewController中,并且在单元格中有文本字段。当用户单击文本字段时,我实现了UITextFieldDelegate,并在textFieldDidBeganEditing方法中确定单元格的索引并滚动到该位置。除了最后4-5个单元格之外,它对所有单元格都很有效。我做错了什么?谢谢。
发布于 2011-06-15 15:29:22
scrollToRowAtIndexPath:只有当tableView的contentSize足够大,可以将单元格放到这些位置时,方法才会将单元格滚动到UITableViewScrollPositionTop或UITableViewScrollPositionMiddle。如果要滚动到顶部或中间的单元格是最后一个单元格或最后几个单元格中的最后一个单元格,则无法滚动到中间或顶部。在这些情况下,您需要手动计算这些单元格的contentOffset。
编辑-计算contentOffset:
为了计算contentOffset,请使用@Schoob指定的方法。将以下代码放入您的textFieldDidBeginEditing方法中。
CGPoint origin = textField.frame.origin;
CGPoint point = [textField.superview convertPoint:origin toView:self.tableView];
float navBarHeight = self.navigationController.navigationBar.frame.size.height;
CGPoint offset = tableView.contentOffset;
// Adjust the below value as you need
offset.y += (point.y - navBarHeight);
[tableView setContentOffset:o animated:YES];发布于 2012-07-16 12:32:42
我发现使用scrollToRowAtIndexPath的关键是确保在视图呈现之后调用它。即被推送到导航控制器或以模态方式呈现。
我的工作代码是这样的
调用代码
MyViewController *cont = [[MyViewController alloc] initWithMedication:medication];
cont.sectionToShow = 1;
[self.navigationController pushViewController:cont animated:YES];
[cont release];viewWillAppear中的视图控制器代码
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:self.sectionToShow];
[cont.tableview scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];如果我用其他方式做,总会有边缘情况下它不起作用。我想我们想要在演示周期的后期滚动。
发布于 2011-06-15 15:28:21
这是在尝试确定添加到UITableViewCell上的视图/文本字段的indexPath时应该使用的内容
CGPoint point = [textField.superview convertPoint:textField.frame.origin toView:self.tableView];然后使用point with
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:point];https://stackoverflow.com/questions/6354172
复制相似问题