iOS UISlider поблескивает при возврате к просмотру

В ящике стола у меня есть UISlider. Если я переместу ручку ползунка, вернусь к своему предыдущему виду, а затем вернусь к виду таблицы, ручка на ползунке вернется к нулю, но я вижу "ореол" ручки, куда я ранее тоже переместил ползунок,

Я очищаю контекстное представление объекта-слайдера в cellForRowAtIndexPath: и перезагружаю таблицу в viewDidAppear.

Кто-нибудь знает, как это исправить? Это довольно раздражает. Я положил код слайдера внизу, если это поможет.

        // Setup slider
        CGRect sliderFrame = CGRectMake(15, 56, 230, 0);
        UISlider *slider = [[UISlider alloc] initWithFrame:sliderFrame];
        slider.clearsContextBeforeDrawing = YES;
        [slider addTarget:self action:@selector(sliderUpdated:) forControlEvents:UIControlEventValueChanged];
        [slider addTarget:self action:@selector(sliderStopped:) forControlEvents:UIControlEventTouchUpInside];
        [cell.contentView addSubview:slider];
        [slider release];

Я ценю его! Спасибо!

1 ответ

Решение

Скорее всего, вы создаете новый UISlider по старому UISlider что дает эффект ореола.

Два возможных решения

  1. Отметить UISlider когда вы добавляете его в ячейку.

  2. Подкласс UITableViewCell и добавить UISlider к его представлению содержимого и сохраните ссылку на него с помощью ивара.

Чтобы сделать 1, просто пометьте UISlider когда вы добавляете его в contentView. Затем, когда вы снова получаете ячейку, вы сначала пытаетесь вернуть вид или создать его заново.

const int sliderViewTag = 99;

UISlider *slider = [cell.contentView viewWithTag:sliderViewTag];

if (!slider) {
  CGRect sliderFrame = CGRectMake(15, 56, 230, 0);
  slider = [[UISlider alloc] initWithFrame:sliderFrame];
  slider.clearsContextBeforeDrawing = YES;
  [slider addTarget:self action:@selector(sliderUpdated:) forControlEvents:UIControlEventValueChanged];
  [slider addTarget:self action:@selector(sliderStopped:) forControlEvents:UIControlEventTouchUpInside];
  [cell.contentView addSubview:slider];
  [slider release]; slider = nil;
}

Хотя 2 немного сложнее, это мой предпочтительный метод, но я уверен, что есть несколько отличных примеров того, как это сделать. Есть несколько отличных документов от Apple, так что ознакомьтесь с ними. A Closer Look at Table-View Cells

Другие вопросы по тегам