2012-09-04 89 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

相關問題