2012-09-04 66 views
2

加载视图时是否可以加载UITableView的所有单元格,以便在滚动时不加载它们? (我将显示加载屏幕,而这样做)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”中,但尚未加载或想要再次加载。 这就是为什么我想要一次加载所有单元格的原因。为表中的每一行

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

+5

“请,这是我的项目的唯一方式” - 它当然**不应该**。请解释一下,即使它很复杂。除此之外,这在内存管理方面也是非常糟糕的错误。 – 2012-09-04 17:52:24

+0

@ H2CO3我编辑了我的问题并更详细地描述了我的问题。希望您能够帮助我。 – Michael

+0

你能解释一下你想用'do ... while'循环完成什么吗?看起来你正在试图找到一个符合某些标准的对象,然后建立一个新的阵列,但为什么你需要在那里做到这一点?你可以在重新加载表之前建立这个数组吗? –

回答

11

你可以通过调用导致所有被简单地预分配的细胞。将上面的代码放入适当的for循环中,并在viewDidAppear中执行此代码。

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

您可以通过将NSMutableArray添加到您的UIViewController来解决该问题,然后缓存在cellForRowAtIndexPath中创建的所有单元格。如果在您的表的整个生命周期中存在动态更新(插入/删除),则您还必须更新缓存阵列。

+1

这是我正在寻找的答案:) 你是我的英雄!十分感谢! 但也要感谢其他人的帮助。 – Michael

+0

我最初说过使用NSMutableArray,但是NSDictionary可能会更好,因为您可以使用'indexPath.row'作为键。 NSMutableArray不会让你添加乱序。 – Kent

+0

是的我已经使用NSDictionary和一个像“indexPath.row/indexPath.section”这样的字符串作为键。 但你给我带来了正确的方向,谢谢:) PS: [self.tableView tableView:self.tableView cellForRowAtIndexPath:indexPath];应该没有你的答案中的第一个“.tableView” – Michael

4

把一个UITableView在一个UIScrollView

例如,你所期望的完整列表的UITableView的高度是1000

然后设置的UIScrollView contentsize为320X1000 并设置UITableView的高度是1000

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

+8

麻烦的完美配方。 – Andy

+0

感谢您的评论。想知道为什么表视图总是加载它的所有行,是的,它是在滚动视图下。不知道这是为什么,但确定,必须重新制作用户界面 – ort11

相关问题