UITableView ScrollToRowAtIndexPath方法不起作用

时间:2015-02-25 18:41:21

标签: ios uitableview scroll

我有一个UITableView作为View的子视图。在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];      
}

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

1 个答案:

答案 0 :(得分: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];