UITableView:加载所有单元格

时间:2012-09-04 17:49:07

标签: objective-c xcode uitableview viewdidload

在加载视图时是否可以加载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循环中: “listData”是一个包含多个字典的数组。 我的问题是,当我慢慢地向下滚动我的桌子时,一切都很好,但是当我快速滚动到视图的末尾然后我滚动到中间时,我得到的错误是iPr不在数组的范围。所以问题是,第一部分的最后一行已经添加到“readingresultsArr”,但尚未加载或想要再次加载。 这就是我想一次加载所有单元格的原因。

4 个答案:

答案 0 :(得分:11)

您可以通过调用:

来预先分配所有单元格
[self tableView: self.tableView cellForRowAtIndexPath: indexPath];

表格中的每一行。将上面的行放在适当的for循环中,并在viewDidAppear中执行此代码。

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

您可以通过向NSMutableArray添加UIViewController来解决该问题,然后在cellForRowAtIndexPath中创建所有单元格。如果在其生命周期内对表进行动态更新(插入/删除),则还必须更新缓存数组。

答案 1 :(得分:7)

在uiscrollview上放置一个uitableview

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

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

然后所有单元格加载其内容甚至在屏幕中都不可见

答案 2 :(得分:1)

在我的案例中,我使用了automaticDimension作为单元格的高度,并将估算的行高度设置为小,这就是为什么tableview加载所有单元格的原因

答案 3 :(得分:0)

根据juancazalla的评论,我发现如果您有一个使用autoDimension的tableView,则可以通过将估计的行高度设置为较低的值(例如1)来最好地一次加载所有单元格。