2013-10-10 59 views
1

我有一個小問題,它似乎非常經典(當通過dequeueReusableCellWithIdentifier重用時混淆了單元格),但我已經查看了類似的問題並找不到答案。帶有文本和圖像的UITableView:在dequeueReusableCellWithIdentifier中混淆了

所以,經典的上下文:我有一個UITableView與故事板中的原型單元格,一個與圖像(異步提取)和一個與UITextView。

讓我們專注於文本單元格,因爲我在兩者都遇到問題,所以我們知道網絡不是原因。

當我再次滑翔時,細胞會混合起來。我認爲這是因爲我根據cellForRowAtIndexPath函數中的數據設置了文本值,但我不確定。

這裏是我的細胞在我的例子:

--------------- 
| 1. "TEXT1" | 
--------------- 
|    | 
| 2. IMAGE2 | 
|    | 
--------------- 
| 3. "TEXT3" | 
--------------- 
| 4. "TEXT4" | 
--------------- 
|    | 
| 5. IMAGE5 | 
|    | 
--------------- 

我滾動一路下來,一切都很好。當我在底部反彈時,單元格3和4被重新加載(我把一個NSLog函數放在cellForRowAtIndexPath函數中)。第一個單元格4重新加載,然後單元格3(根據日誌)。 問題是,單元格3和4都以「TEXT3」作爲值!我的意思是,如果我給函數中的UITextField.text的值爲NSLog,它們不具有相同的文本值,但在模擬器的屏幕上,它們具有..?

這裏是我的代碼:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Getting data for row from indexPath 
    Data *data = [self.dataArray objectAtIndex:indexPath.row]; 
    NSString *cellIdentifier = [NSString stringWithFormat:@""]; 
    if (data.type == 1) { // Text type 
     cellIdentifier = @"TextCell"; 
    } 
    else if (data.type == 2){ 
     cellIdentifier = @"PhotoCell"; 
    } 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath]; 
    // Getting various cell elements 

    if (data.type == 1) { 
     // Text is 1000 
     UITextView *textView = (UITextView *)[tableView viewWithTag:1000]; 
     textView.text = data.text; 
    } 
    else if (data.type == 2){ 
     //STUFF FOR PHOTO TYPE OF DATA 
    } 

    return cell; 
} 

順便說一句,它可以說,我在iOS6的模擬器得到這個錯誤,但不是在iOS7(但也許這只是不同的內存管理有用的.. )

非常感謝您的幫助!

+0

檢查data.type看看它是不是1或2 –

+0

謝謝,我已經這樣做了。我開始猜測,我的問題是,我得到的'UITextView'我改變文本值沒有鏈接到特定的單元格,因爲我得到它'[tableView viewWithTag]'?? –

+0

我實際上通過[cell viewWithTag:1000]而不是[tableView viewWithTag:1000]來修復它,這使我可以改變正確的UITextView ... –

回答

0

我實際上是通過測試找到了解決方案... 我的問題是,要訪問原型單元格中的文本視圖,我在故事板中給了它一個標籤。

但是,當我想要編輯cellForRowAtIndexPath中的文本時,我使用的是[tableView viewWithTag:myTag],而本應該使用[cell viewWithTag:myTag],所以我正在編輯,我猜是最後一個?

總而言之,現在很好..而我只是看着錯誤的地方,因爲我確信它是關於重複使用錯誤的單元格或者是不正確的。 如果有人知道它爲什麼沒有在ios7中發生,請分享 !

1

我有同樣的問題,這就是我解決它的方法。

在我CustomTableViewCell,我有init方法

,所以我說在初始化這種情況下我在那裏設置值,標籤等。

代碼:

  • (無效)initWithCellLabelString:(的NSString *)cellLabelString {

    爲(在self.contentView.subviews ID子視圖){ [子視圖removeFromSuperview]; }

//初始化休息

}

希望有所幫助的。

編輯 我更好的方法是覆蓋CustomFormat表視圖單元類中的prepareForReuse並將值設置爲nil。這可能不是推薦的方法,但我沒有遇到任何性能問題。

+0

嗨,我還沒有測試過這個,因爲我找到了另一個解決方案,很多爲您的答案,這可能會幫助別人 –