Пользовательский UITableViewCell неправильно скрывает представления - PullRequest
1 голос
/ 09 апреля 2010

Я использую код ячейки пользовательского табличного представления Apple и изменяю код drawRect в представлении ячейки, чтобы он выглядел так, как я хочу. Я изменил его, чтобы иметь некоторые UILabels, а также UIProgressView.

Если данные, на которых строится ячейка, не имеют определенного поля, я хочу, чтобы UIProgressView был скрыт. Это работает некоторое время, но когда ячейка попадает в очередь из-за прокрутки, представление прогресса снова начинает отображаться, даже когда я установил ее в значение hidden = YES. Я пытался просто не создавать ProgressView, если не было данных, и это тоже не сработало.

Я думал, что ответ был в [self setNeedsDisplay], но это, похоже, не помогает.

Вот код для просмотра прогресса от drawRect, который продолжает отображаться:

UIProgressView *c1Progress = [[UIProgressView alloc]initWithFrame:CGRectMake(20.0, 70.0, 280.0, 12.0)];   
float iProgress = (value / target);
c1Progress.progress = iProgress;
if (!dataExists) {
    c1Progress.hidden = YES;
}
[self addSubview:c1Progress];
[c1Progress release];

Ответы [ 2 ]

1 голос
/ 09 апреля 2010

проверить значение dataExists ... и распечатать его в NSLog, и если этот фрагмент кода выполняется каждый раз ... удалить это из drawRect ... инициализировать и освободить его только один раз ...

1 голос
/ 09 апреля 2010

Вы определенно не хотите этот код в drawRect. Вы должны выделить / инициализировать свой UIProgressView и добавить его в качестве подпредставления в свой метод подкласса UITableViewCell init (и обязательно выпустить его в dealloc).

Логика для установки c1Progress.progress и c1Progress.hidden должна идти в каком-то методе, который вызывается только при изменении value, target или dataExists. Если у вас есть метод установки для рассматриваемых данных / значений, это было бы хорошим местом для этого.

...