UITableViewCell UITableViewCell可重用性不起作用。滚动页面时,单元格不会刷新其内容。而不是它,新的图像被放在旧图像上。我做错了什么?
- (ChartCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
ChartCell *cell = (ChartCell *)[tableView dequeueReusableCellWithIdentifier:@"graphCell" forIndexPath:indexPath];
NSString* object_id = dataDict[@"cellIDs"][indexPath.row];
[[NetworkManager sharedSource] getData:[object_id integerValue] Success:^(NSDictionary *data) {
dispatch_async(dispatch_get_main_queue(), ^{
cell.cellID = [data[@"chartType"] integerValue];
//cell.textLabel.text = data[@"chartType"];
switch (cell.cellID) {
case 0:
for(int i=0; i<[data[@"chartData"] count]; i++){
cell.barNames[i] = data[@"chartData"][i][@"name"];
cell.barHeights[i] = data[@"chartData"][i][@"value"];
}
[cell createPieChart];
break;
case 1:
for(int i=0; i<[data[@"chartData"] count]; i++){
cell.barNames[i] = data[@"chartData"][i][@"name"];
cell.barHeights[i] = data[@"chartData"][i][@"value"];
}
[cell createBarChart];
break;
case 2:
break;
case 3:
break;
default:
break;
}
});
} Error:^(NSString *errorMessage) {
dispatch_async(dispatch_get_main_queue(), ^{
//показать ошибку
});
}];
return cell;}
UPDATE !!! 所以prepareForReuse确实有效。但它不是针对MVC - 在UITableViewCell子类中为动态tableview单元编写代码吗?难道我不能为我的自定义UITableViewCell创建一个View Controller吗?
答案 0 :(得分:0)
在ChartCell class
中,使用prepareForReuse()
方法清除您的单元格
func prepareForReuse() {
// clear pie chart
// clear bar chart
// clear name etc.
}
答案 1 :(得分:0)
实际上我们正在重复使用这个观点。因此,如果您将视图添加到单元格的视图一次,它就会存在。您必须从superview中删除视图,并准备好显示另一个单元格的数据。
您可以通过覆盖prepareForReuse
课程中的UITableViewCell
方法来清除现有视图。
- (void)prepareForReuse {
[self clearPieChart];
[self clearBarChart];
}