2013-08-22 65 views
2

此前已工作,除非它已經很長時間了,我忽略了一些東西。當表格第一次顯示一切看起來不錯時,但如果我向上滾動和向下滾動標籤則會得到重複的內容。使用自定義子視圖滾動UITableView時複製數據

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil){ 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

     UILabel *labelName = [[UILabel alloc] initWithFrame:CGRectMake(20, 0, tableView.frame.size.width, 35)]; 

     labelName.tag = 20; 

     [cell addSubview:labelName]; 
    } 

    ((UILabel *)[tableView viewWithTag:20]).text = [data objectAtIndex:indexPath.row]; 

    return cell; 
} 
+2

嘗試[cell.contentView addSubview:labelName]; – Moxy

+0

嘗試設置'dequeueReusableCellWithIdentifier'爲'nil',看到我從這個鏈接的答案http://stackoverflow.com/questions/15702242/uitableviewcells-with-default-image-overwritten-with-other-images-upon-scrolli/ 15702271#15702271 –

+0

不會將dequeueReusableCellWithIdentifier設置爲nil爲每行創建一個新的單元格? [cell.contentView addSubview:labelName];沒有效果。 –

回答

5

我發現這激發了它的線!

((UILabel *)[tableView viewWithTag:20]).text = [data objectAtIndex:indexPath.row]; 

你發送-viewWithTag:tableView獲取標籤,但你應該問的細胞。

在一個側面說明,它總是更好的子視圖添加到單元格的contentView

這裏是正確的實現。

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (!cell){ 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
             reuseIdentifier:CellIdentifier]; 

     UILabel *labelName = [[UILabel alloc] initWithFrame:CGRectMake(20, 0, tableView.frame.size.width, 35)]; 

     labelName.tag = 20; 

     [cell.contentView addSubview:labelName]; 
    } 

    ((UILabel *)[cell.contentView viewWithTag:20]).text = [data objectAtIndex:indexPath.row]; 

    return cell; 
} 
+0

該死的,很好的捕獲。我認爲一切都看起來不錯,有另一雙眼睛是很好的。單元格是否爲新行是否正常?我認爲它會重複使用同一個單元格的每一行?例如,當tableview第一次加載單元格時,每個新行都爲零。 –

+0

是的,第一個單元需要分配。只有在滾出後纔可以重複使用。 – Moxy

1

寫的if (cell == nil)條件

labelName.text = [data objectAtIndex:indexPath.row]; 

和評論或刪除此行波紋管這裏面波紋線..

((UILabel *)[tableView viewWithTag:20]).text = [data objectAtIndex:indexPath.row]; 
+0

可重複性!嘗試用數百個單元格進行配置! – Moxy

+0

我知道,但如果記錄不是更多,那麼它將工作perfact和 –

+0

「如果」即使他只有很少的數據,會有很多人閱讀這個解決方案後,它不是一個很好的例子,如何使用表觀點。 – Moxy

相關問題