我有一個小問題,它似乎非常經典(當通過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(但也許這只是不同的內存管理有用的.. )
非常感謝您的幫助!
檢查data.type看看它是不是1或2 –
謝謝,我已經這樣做了。我開始猜測,我的問題是,我得到的'UITextView'我改變文本值沒有鏈接到特定的單元格,因爲我得到它'[tableView viewWithTag]'?? –
我實際上通過[cell viewWithTag:1000]而不是[tableView viewWithTag:1000]來修復它,這使我可以改變正確的UITextView ... –