UITableViewCell可重用性不起作用

时间:2017-09-26 12:29:37

标签: ios objective-c uitableview

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吗?

2 个答案:

答案 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];
}