У меня есть вид с пользовательским слайдером.Мы используем подкласс TableViewController, который генерирует экземпляры UITableViewCell.Внутри каждого tableViewCell мы добавляем наш пользовательский слайдер (представление пользовательского интерфейса) в качестве подпредставления.Здесь у нас есть вид, который служит ручкой управления ползунка.Это просто подкласс UIView с распознавателем жестов.Метод drawRect для класса регулятора принимает UIImage и выполняет drawAtPoint.Это прекрасно работает!Подводя итог, мы имеем:
UITableView -> UITableViewCell -> UITableViewCell.contentView -> SliderView -> SliderKnob -> UIImage
Проблема возникает, когда мы прокручиваем ячейку таблицы из представления таблицы,UIImage для ручки сохраняется.В итоге мы получаем дубликат изображения, оставшегося при каждом снятии очереди с ячейки.Я настроил несколько операторов NSLog и подтвердил, что drawRect вызывается в каждом из подпредставлений.Есть ли что-то, что мне нужно сделать, чтобы обновить рендеринг ячейки?Я пытался использовать setNeedsDisplay на подпредставлениях UITableViewCell, но не смог предотвратить дублирование UIImage.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"SliderView";
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier] autorelease];
}
SliderView *slider = [[[SliderView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 130)] autorelease];
// Configure the data for the cell.
NSDictionary *dataItem = [data objectAtIndex:indexPath.row];
slider.dimensionName = [dataItem objectForKey:@"Name"];
slider.upperExtreme = [dataItem objectForKey:@"Upper Extreme"];
slider.lowerExtreme = [dataItem objectForKey:@"Lower Extreme"];
slider.score = [[dataItem objectForKey:@"Score"] intValue];
cell.selectionStyle = UITableViewCellEditingStyleNone;
cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"track_grainy.png"]];
[cell.contentView addSubview:slider];
return cell;
}