У меня есть подкласс UITableViewCell, который содержит несколько элементов - UIImageViews, Labels и т. Д.
Поскольку эта ячейка предназначена для повторного использования, я хочу иметь возможность немного изменить ее внешний вид в зависимости от данных, отображаемых в настоящее время.UITableViewCell не очищает контекст перед рисованием
Так как пример - у меня есть этот вид в моем обычае UITableViewCell:
UIImageView* delimeterView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cellDelimiter.png"]];
Что я хочу, чтобы иметь возможность скрыть иногда так:
- (void) setRecord:(id)record__ {
if (record__.type == NO_DELIMETER_VIEW)
delimeterView.hidden = YES;
else
delimeterView.hidden = NO;
[self setNeedsLayout];
}
Но проблема в том, что delimeterView всегда будет отображаться в ячейке, точно так же, как если бы он был нарисован один раз в методе init, а затем контекст рисования никогда не изменялся и не очищался. Я попытался установить свойство clearsContextBeforeDrawing на YES как для ячейки, так и для ее содержимогоView. Я также попытался установить непрозрачность для ячейки, а ее contentView - нет, так как я прочитал, могут возникнуть некоторые проблемы с этим, если вы используете прозрачный Просмотры.
Ничего не помогает.
Похоже, что UITableViewCell никогда не очищает свой графический контекст и просто рисует поверх старых элементов.
Любые советы о том, что я делаю неправильно? Я знаю, что могу исправить это, выполнив индивидуальный рисунок, но я бы предпочел.
И вы вызываете -setRecord: в ячейке каждый раз, когда вы ее возвращаете, - [UITableView cellForRowAtIndexPath:] (или он передан - [UITableViewDelegate tableView: willDisplayCell: forRowAtIndexPath:])? –
Да, он предназначен для вызова каждый раз в методе cellForRowAtIndexPath. – Alexey