首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UITableView scrollToRowAtIndexPath在过去的4个月内不工作

UITableView scrollToRowAtIndexPath在过去的4个月内不工作
EN

Stack Overflow用户
提问于 2011-06-15 15:00:23
回答 3查看 16.1K关注 0票数 10

我在一个UITableViewController中,并且在单元格中有文本字段。当用户单击文本字段时,我实现了UITextFieldDelegate,并在textFieldDidBeganEditing方法中确定单元格的索引并滚动到该位置。除了最后4-5个单元格之外,它对所有单元格都很有效。我做错了什么?谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-15 15:29:22

scrollToRowAtIndexPath:只有当tableView的contentSize足够大,可以将单元格放到这些位置时,方法才会将单元格滚动到UITableViewScrollPositionTop或UITableViewScrollPositionMiddle。如果要滚动到顶部或中间的单元格是最后一个单元格或最后几个单元格中的最后一个单元格,则无法滚动到中间或顶部。在这些情况下,您需要手动计算这些单元格的contentOffset。

编辑-计算contentOffset:

为了计算contentOffset,请使用@Schoob指定的方法。将以下代码放入您的textFieldDidBeginEditing方法中。

代码语言:javascript
复制
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];
票数 35
EN

Stack Overflow用户

发布于 2012-07-16 12:32:42

我发现使用scrollToRowAtIndexPath的关键是确保在视图呈现之后调用它。即被推送到导航控制器或以模态方式呈现。

我的工作代码是这样的

调用代码

代码语言:javascript
复制
MyViewController *cont = [[MyViewController alloc] initWithMedication:medication];
cont.sectionToShow = 1;
[self.navigationController pushViewController:cont animated:YES];

[cont release];

viewWillAppear中的视图控制器代码

代码语言:javascript
复制
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:self.sectionToShow];
[cont.tableview scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];

如果我用其他方式做,总会有边缘情况下它不起作用。我想我们想要在演示周期的后期滚动。

票数 3
EN

Stack Overflow用户

发布于 2011-06-15 15:28:21

这是在尝试确定添加到UITableViewCell上的视图/文本字段的indexPath时应该使用的内容

代码语言:javascript
复制
CGPoint point = [textField.superview convertPoint:textField.frame.origin toView:self.tableView];

然后使用point with

代码语言:javascript
复制
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:point];
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6354172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档