UITableView dequeuReuseableCellWithIdentifier, графика появляется, когда я не хочу - PullRequest
0 голосов
/ 02 февраля 2012

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

Так что в этом случае у меня есть UITableView внутри поповера.Это сгруппированная таблица.Группы имеют 2-4 ячейки в зависимости от данных.Я использую UITableViewCellStyleValue2, как приложение контактов.Я хочу добавить изображение в правой части ячейки на первую ячейку в группе только в зависимости от данных.Это работает, однако, как только я прокручиваю таблицу, она берет убранную ячейку, а затем я получаю одно изображение справа для ячейки, которая даже не является первой ячейкой.Я не создал подкласс UITableViewCell и не уверен, нужно ли мне добавить эту точку, чтобы у меня был контроль над изображением, которое я добавляю в ячейку.

Итак, вот важная часть метода 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 Ответ

1 голос
/ 02 февраля 2012

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

, например

@implementation MyTableViewCellSubclass


// other methods
// ...

- (void)prepareForReuse {
    [super prepareForReuse];

    self.otherImageView.image = nil;
}

@end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...