2012-03-30 67 views
0

我有一個UINavigationController完整的UITableViews,並在這些特定的一箇中使用自定義單元格。UITableView單元格標籤複製

tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath我添加一個UILabel與[cell addSubview:label];

這個偉大的工程,但是如果我然後進入詳細視圖,然後恢復,它複製的標籤。我怎樣才能阻止呢?

謝謝。

+0

請從'cellForRowAtIndexPath:'發佈代碼。我們如何修復我們無法閱讀的代碼? – Sam 2012-03-30 15:55:17

回答

3

問題在於,每當單元格重新使用並再次顯示時,您都要添加一個新標籤。

由於您已經在使用自定義單元格,因此最簡單的解決方案是給單元格一個UILabel屬性,並使用該屬性,而不是每次都添加一個新標籤。具體而言,如果您要創建單元格而不是回收單元,則應該只添加一個新標籤。或者,只有在房產爲零時,您纔可以添加新的UILabel

+0

我沒有每次都聲明一個新的標籤,我按照你說的做了,並且在我的自定義單元類中有一個標籤的屬性。 – 2012-03-30 15:17:06

+0

那你爲什麼每次都把它作爲子視圖添加? – yuji 2012-03-30 15:20:49

+0

因爲如果我不把它作爲子視圖添加,那麼它不會顯示出來。我宣佈了它,並在我的自定義類中給它一個屬性,這就是爲什麼林部分不確定發生了什麼。 – 2012-03-30 15:25:36

0

添加標籤的標籤,然後檢查是否存在

UILabel *label;  
if ([cell viewWithTag:2]){ 
    label = [cell viewWithTag:2];} 
else{ 
    label = [[UILabel alloc]init];label.tag = 2;} 
1

或者作爲替代的自定義類添加標籤,只需確保添加的條件細胞產生內側的標籤。例如

UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:ident]; 

if(cell == nil){ 
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:ident] autorelease]; 
    [cell.contentView addSubview:[[[UILabel alloc] init] autorelease]]; // <------- 
}