2014-01-24 38 views
0

我有一個UITableViewController複製行,當我向下滾動。我知道單元格正在被重用,但我似乎無法弄清楚如何解決它。我已經閱讀了其他類似的帖子,無法找出解決方案。UITableViewController複製行?

我在做什麼錯在我的代碼導致重複的單元格?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellIdentifier = @"StringTableViewCell"; 

    if (indexPath.row == 0) { 
     cellIdentifier = @"StringTableViewCell"; 
    } else if (indexPath.row == 1) { 
     cellIdentifier = @"StringTableViewFooter"; 
    } 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

    // Sets up the table view cell accordingly based around whether it is the 
    // string row or the footer 
    if (cell) { 
     if ([cell isKindOfClass:[StringTableViewCell class]]) { 
      StringTableViewCell *stringCell = (StringTableViewCell *)cell; 
      // Sets the photos to the array of photo data for the collection view 
      [stringCell setCollectionData:self.images]; 
     } else if ([cell isKindOfClass:[StringFooterTableViewCell class]]) { 
      // Sets the table view cell to be the custom footer view 
      StringFooterTableViewCell *footerCell = [[StringFooterTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"StringTableViewCellFooter"]; 

      // Init's the footer with live data from here 
      [footerCell setStringUploaderName:@"Name"]; 
      [footerCell setStringUploadDate:@"10 minutes ago"]; 
      [footerCell setStringUploaderProfileImage:[UIImage imageNamed:@"avatar.jpg"]]; 
      [footerCell setCommentButtonTitle:@"4.7k"]; 
      [footerCell setLikeButtonTitle:@"11.3k"]; 

      return footerCell; 
     } 
    } 

    return cell; 
} 
+0

你能告訴我們你的截圖嗎? – chancyWu

+0

你的代碼只支持兩行單元格。哪些索引路徑應該用於頁腳,哪些索引路徑應該是其他類型? – rmaddy

+0

@rmaddy indexPath.row 0代表第一個單元格,第1行代表頁腳。過去我已經將它放置在特定的位置,正常的單元格或頁腳單元有條件地放在它們各自的行下,但沒有變化。 – Jonathan

回答

0

有用於UITableViewCell的一個prepareForReuse方法被稱爲每次有即將被重用時間。您可以將StringTableViewCell的imageview圖像設置爲零,或者您可以在單元格上爲indexPath本身執行此操作,因爲prepareForReuse方法僅鼓勵用於重置單元格的狀態(如hightlighted或selected),它的子視圖。

0

既然你有兩個不同的細胞,你需要這樣的事:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.row == 0) { 
     static NSString *cellIdentifier = @"StringTableViewCell"; 
     StringTableViewCell *stringCell = (StringTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
     if (!stringCell) { 
      stringCell = [[StringTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
     } 

     [stringCell setCollectionData:self.images]; 

     return stringCell; 
    } else if (indexPath.row == 1) { 
     static NSString *cellIdentifier = @"StringTableViewFooter"; 
     StringFooterTableViewCell *footerCell = (StringFooterTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
     if (!footerCell) { 
      footerCell = [[StringFooterTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
     } 

     // Init's the footer with live data from here 
     [footerCell setStringUploaderName:@"Name"]; 
     [footerCell setStringUploadDate:@"10 minutes ago"]; 
     [footerCell setStringUploaderProfileImage:[UIImage imageNamed:@"avatar.jpg"]]; 
     [footerCell setCommentButtonTitle:@"4.7k"]; 
     [footerCell setLikeButtonTitle:@"11.3k"]; 

     return footerCell; 
    } else { 
     return nil; // this shouldn't happen but makes the compiler happy 
    } 
} 

當然需要進行更新,以顯示數據相應的給定的部分代碼。

+0

我剛剛在這裏實現了代碼,但同樣的問題仍然存在。有任何想法嗎? – Jonathan

+0

如果你的意思是每個部分的第一行是相同的,並且每個部分的頁腳都是相同的,那麼請閱讀我答案的最後一句。您將每個部分硬編碼爲相同的。代碼需要基於'indexPath.section'獲取數據,因此每個部分都有自己的數據。 – rmaddy

+0

我確實給每個部分提供了數據,但碰巧是相同的圖像數組。我看到的錯誤是當我在一個單元格上執行一個操作。在我的情況下,我可以通過單元格中的圖像輕掃,然後移動。如果隨着這些圖像在該單元格中移動,向下滑動桌面,我會在另一個單元格中看到相同的單元格。圖像也將移動。我理解將不同數據放在這些部分的想法,但是如果我只是在每個單元格中放入不同的圖像,是否可以解決這個問題? – Jonathan