UITableView的indexPathsForVisibleRows是否返回错误的路径?

时间:2010-09-03 20:46:15

标签: iphone objective-c cocoa-touch uitableview

我使用以下代码触发可见单元格/路径中的图像下载:

- (void)loadImagesForOnScreenrows {
   NSArray *visiblePaths = [tableView indexPathsForVisibleRows];

   for (NSIndexPath *indexPath in visiblePaths) {
      UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
      if([cell viewWithTag:kTagImageView] != nil) {
         (ImageViewCached *)[[cell viewWithTag:kTagImageView] triggerDownload];
      }
   }
}


// Load images for all onscreen rows when scrolling is finished
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
   if (!decelerate)
    {   
        [self loadImagesForOnscreenRows];
    }

}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    [self loadImagesForOnscreenRows];
}

但是,显然返回的indexPaths并不反映实际的屏幕行。

特别是如果我快速滚动,返回的行将是已经屏幕外的行。

有人会想到一个好的(可能是显而易见的)理由,为什么会出现这种情况?

1 个答案:

答案 0 :(得分:1)

是否在其他地方调用了-loadImagesForOnscreenRows?

看起来你是从LazyTableImages示例代码开始的。我只能在滚动结束时(或拖动结束时)调用-loadImagesForOnscreenRows示例项目。

快速滚动在该项目中无关紧要,因为在滚动停止之前不会询问可见行。

我只在模拟器上尝试了LazyTableImages代码,而不是设备。 YMMV。