4

是否可以在加载视图时加载 UITableView 的所有单元格,以便在滚动时不加载它们?(我会在执行此操作时显示加载屏幕)

拜托,这是我项目的唯一方法(抱歉太复杂了,无法解释原因^^)

编辑:

好吧,让我解释一下,我肯定在做什么:

- (UITableViewCell *)tableView:(UITableView *)tableView
     cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   NSString *cellIdentifier = [NSString stringWithFormat:@"Identifier %i/%i", indexPath.row, indexPath.section];
   CustomTableCell *cell = (CustomTableCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
   NSDictionary *currentReading;

   if (cell == nil)
   {
       cell = [[[CustomTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];

       UILabel *label;
       UIView *separator;

       if(indexPath.row == 0)
       {
           // Here I'm creating the title bar of my "table" for each section
       }
       else
       {
           int iPr = 1;

           do
           {
               currentReading = [listData objectAtIndex:iPr-1];
               iPr++;
           } while (![[currentReading valueForKey:@"DeviceNo"] isEqualToString:[devicesArr objectAtIndex:indexPath.section]] || 
                      [readingresultsArr containsObject:[currentReading valueForKey:@"ReadingResultId"]]);

           [readingresultsArr addObject:[currentReading valueForKey:@"ReadingResultId"]];
           //
           // ...
           //
       }
    }
    return cell;
}

我的错误发生在 do-while-loop 中:“listData”是一个包含多个字典的数组。我的问题是,当我慢慢向下滚动表格时,一切都很好,但是当我快速滚动到视图的末尾然后滚动到中间时,我得到了 iPr 不在的错误数组的范围。所以问题是,第一部分的最后一行已经添加到“readingresultsArr”中,但还没有加载或想要再次加载。这就是我想一次加载所有单元格的原因。

4

4 回答 4

11

只需调用以下命令,您就可以预先分配所有单元格:

[self tableView: self.tableView cellForRowAtIndexPath: indexPath];

对于表中的每一行。将上述行放在适当的 for 循环中并在viewDidAppear.

然而问题是 tableView 不会保留所有这些单元格。当不需要它们时,它将丢弃它们。

您可以通过添加一个NSMutableArray来解决这个问题UIViewController,然后缓存所有在cellForRowAtIndexPath. 如果您的表在其生命周期内有动态更新(插入/删除),您也必须更新缓存数组。

于 2012-09-04T23:06:01.447 回答
9

在 uiscrollview 上放一个 uitableview

例如,您希望完整列表 uitableview 的高度为 1000 。

然后设置 uiscrollview contentsize 为 320X1000 并设置 uitableview 高度为 1000

然后所有单元格加载它们的内容,甚至在屏幕上不可见

于 2013-05-28T02:17:05.070 回答
3

在我的情况下,我使用 automaticDimension 作为单元格高度并将estimatedRowHeight 设置为小,这就是 tableview 加载所有单元格的原因

于 2019-02-19T11:53:01.743 回答
0

根据 juancazalla 的评论,我发现如果您有一个使用 automaticDimension 的 tableView,一次加载所有单元格的最佳方法是通过将estimatedRowHeight 设置为低值(例如 1)来实现。

于 2020-04-19T01:20:06.377 回答