UITableView ScrollToRowAtIndexPath 方法不起作用

Posted

技术标签:

【中文标题】UITableView ScrollToRowAtIndexPath 方法不起作用【英文标题】:UITableView ScrollToRowAtIndexPath method not working 【发布时间】:2015-02-25 18:41:21 【问题描述】:

我有一个 UITableView 作为视图的子视图。在填充表时的 ViewController 中,我突出显示其中一行并保留该行的 indexPath 记录。我在 cellforRowAtIndexPath 方法中这样做。

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
favouriteCellView *cell = [tableView dequeueReusableCellWithIdentifier:@"reuseID"];

QBCOCustomObject *favouriteObject = [_favouriteResults objectAtIndex:indexPath.row];

if (favouriteObject.userID == self.user.ID) 
    UIView *bgColor = [[UIView alloc] init];
    bgColor.backgroundColor = [UIColor colorWithRed:173.0f/255.0f green:146.0f/255.0f blue:237.0f/255.0f alpha:.5];
    self.highlightedRowIndex = indexPath;
    [cell setSelectedBackgroundView:bgColor];
    [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionMiddle];

return cell;

然后在 viewDidAppear 方法中,我希望表格滚动到突出显示的单元格。

-(void)viewDidAppear:(BOOL)animated
     [self.tableView scrollToRowAtIndexPath:self.highlightedRowIndex atScrollPosition:UITableViewScrollPositionTop animated:YES];      

但是,我已经仔细检查过该方法是否被断点击中,但不幸的是,突出显示的行并没有像我预期的那样滚动到表格的顶部。我误解了 scrollToRowAtIndexPath 方法吗?还是我在上面的代码中遗漏了一些东西。

【问题讨论】:

【参考方案1】:

如果该行不在屏幕上,它还不会被表格视图加载。这意味着您的cellForRowAtIndexPath 将不会被调用。您需要以不依赖于视图加载的方式选择此索引。在打电话给scrollToRowAtIndexPath之前试试这个:

NSInteger row = 0;
for (QBCOCustomObject *object in _favouriteResults) 
  if (object.userID == self.user.ID) break;
  row++;

self.highlightedRowIndex = [NSIndexPath indexPathForRow:row inSection:0];

【讨论】:

以上是关于UITableView ScrollToRowAtIndexPath 方法不起作用的主要内容,如果未能解决你的问题,请参考以下文章

UItableview 单元格的动态高度与 UItableview 单元格内的 UItableview

UITableView

水平 UITableView 中的垂直 UITableView

如何与重叠显示的 UITableView 交互另一个 UITableView

在 UITableView 中的 UINib 中重新加载 UITableView

iOS小技能:1. 什么是UITableView? 2. UITableView如何展示数据