我有一个小问题,它似乎真的很经典(dequeueReusableCellWithIdentifier 重用时混淆了单元格)但我已经看过类似的问题但找不到答案。
所以,经典上下文:我UITableView
在情节提要中有一个带有原型单元格,一个带有图像(异步获取),一个带有 UITextView。
让我们关注文本单元格,因为我在这两个方面都遇到了问题,所以我们知道网络不是原因。
当我再次上下滚动时,细胞会混在一起。我认为这是因为我根据cellForRowAtIndexPath
函数内部的数据设置了文本值,但我不确定。
这是我的示例中的单元格:
---------------
| 1. "TEXT1" |
---------------
| |
| 2. IMAGE2 |
| |
---------------
| 3. "TEXT3" |
---------------
| 4. "TEXT4" |
---------------
| |
| 5. IMAGE5 |
| |
---------------
我一直向下滚动,一切都很好。当我在底部弹跳时,重新加载单元格 3 和 4(我在cellForRowAtIndexPath
函数中放置了一个 NSLog)。首先重新加载单元格 4,然后重新加载单元格 3(根据日志)。问题是,单元格 3 和 4 都以“TEXT3”作为值!我的意思是,如果我NSLog
在函数中给 UITextField.text 的值,它们没有相同的文本值,但在模拟器的屏幕上,它们有..?
这是我的代码:
- (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 上没有出现此错误可能很有用(但也许这只是不同的内存管理..)
非常感谢你的帮助!