2012-02-01 3 views
0

Я читал, что из-за метода dequeueReusableCellWithIdentifier, захватывающего oldCell, если есть один доступный для использования, а не для создания нового, если у меня есть специальные представления для отображения, например изображения или галочки, которые я хочу явно сказать, show = YES или show = NO для ячейки, поэтому ячейка не закончит работу с ячейкой со старым изображением на ней, и я получаю изображение, которое я не хочу использовать мой взгляд.UITableView dequeuReuseableCellWithIdentifier, графика появляется, когда я не хочу

Так что в этом случае у меня есть UITableView внутри popover. Это сгруппированная таблица. Группы имеют 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

Вы должны сделать это с помощью UITableViewCell подкласса, а затем вы можете очистить ваш второй UIImageView в prepareForReuse

например

@implementation MyTableViewCellSubclass 


// other methods 
// ... 

- (void)prepareForReuse { 
    [super prepareForReuse]; 

    self.otherImageView.image = nil; 
} 

@end 
Смежные вопросы