UITableView dequeuReuseableCellWithIdentifier,当我不想要时出现图形

时间:2012-02-01 23:45:20

标签: iphone uitableview

我读到这是因为dequeueReusableCellWithIdentifier方法抓住了一个oldCell,如果有一个可用而不是创建一个新的,如果我有特殊的视图要显示,比如图像或复选标记,我想明确说,show =单元格的YES或show = NO,因此单元格最终不会使用带有旧图形的单元格,最终得到的图像我不希望在我的视图中显示。

所以在这种情况下,我在弹出窗口中有一个UITableView。这是一个分组表。根据数据,这些组有2-4个单元。我正在使用UITableViewCellStyleValue2,就像联系人应用程序一样。我想根据数据在组中第一个单元格的单元格右侧添加图像。然而,一旦我滚动表格,它就会选择一个出列的单元格,然后我会在右侧获得一个图像,这个图像甚至不是第一个单元格。我没有创建一个UITableViewCell子类,我不确定是否需要添加这一点,所以我可以控制我正在添加到单元格的imageView。

所以这是cellForRowAtIndexPath方法的重要部分:

if (row == 0) {
    UIImage *dot;
    if (aTarget.importance == TargetImportanceHigh) {
        dot = [UIImage imageNamed:@"dot_red.png"];
    }
    else if (aTarget.importance == TargetImportanceLow) {
        dot = [UIImage imageNamed:@"dot_yellow.png"];
    }
    else {
        dot = [UIImage imageNamed:@"dot_black.png"];
    }
    UIImageView *imgView = [[UIImageView alloc] initWithImage:dot];
    imgView.frame = CGRectMake(cell.frame.size.width - 50, cell.frame.size.height / 2 - 7.5, 15, 15);
    [cell.contentView addSubview:imgView];
    [imgView release];

    cell.textLabel.text = @"Location
    cell.detailTextLabel.text = [NSString stringWithFormat:@"%i", aTarget.location];
}
else if (row == 1) {
    cell.textLabel.text = @"Coordinate";
    cell.detailTextLabel.text = [NSString stringWithFormat:@"%@", aTarget.coordinate];
}
return cell;

1 个答案:

答案 0 :(得分:1)

您应该通过UITableViewCell子类执行此操作,然后您可以清除UIImageView中的第二个prepareForReuse

e.g。

@implementation MyTableViewCellSubclass


// other methods
// ...

- (void)prepareForReuse {
    [super prepareForReuse];

    self.otherImageView.image = nil;
}

@end