2014-02-16 4 views
0

Я знаю, что это старая проблема, но на этот раз у меня есть немного поворот.UITableView Повторяющийся контент

Как говорится в названии, мой UITableView повторяет контент. В этом случае цвет фона меняется на ячейку, которую он не должен прокручивать и обратно на экране.

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

Итак, как я могу обойти эту проблему, сохраняя мою камеру в моей раскадровке?

Небольшой код:

static NSString *cellIdentifier = @"Cell"; 
     SLDetailCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath]; 

     if (!cell) 
     { 
      cell = [[SLDetailCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
     } 

    [cell setBackgroundColor:[UIColor slateBackgroundGrey]]; //Set standard background colour 
    [cell.titleLbl setText:[self.tableTitles objectAtIndex:indexPath.row]]; //cell titles from an array (static data I made) 

    //This will occur for each cell, here are two examples 
    if ([cell.titleLbl.text isEqualToString:@"Aircraft"]) 
    { 
     NSString *detailText = @""; 
     if (!self.flight.aircraft) detailText = @"N/A"; 
     else detailText = self.flight.aircraft.name; 
     [cell.detailLbl setText:detailText]; 
    } 
    if ([cell.titleLbl.text isEqualToString:@"Delete"]) 
    { 
        UIView *containerView = [cell.titleLbl superview]; 
        [containerView setBackgroundColor:[UIColor triggerRed]]; 
        [cell.titleLbl setTextColor:[UIColor whiteColor]]; 
        [cell.disclosureIndicator setHidden:YES]; 
        [cell.detailLbl setText:@""]; 
    } 

В случае удаления ячейки изменить цвет свойства клетки.

Подклассы prepareForReuse для сброса данных ячейки не могут остановить повторение данных, равно как и установка цвета в каждой отдельной ячейке if (как вы видите выше).

Спасибо.

+0

Где ваш код для установки цвета фона? – rmaddy

+0

О, а что за твист? Это звучит так же, как и у всех с неправильным повторным использованием. – rmaddy

+0

Каждое решение, которое я видел, десятки и десятки из них разрешает это, используя уникальные идентификаторы ячеек, однако, когда вы используете раскадровку, это бесполезно. То, что я использую раскадровку :) –

ответ

3

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

+0

Вы должны получить обнятый значок для того, чтобы быть обманутым другим пользователем. –

0

У вас есть собственный подкласс UITableViewCell. Вы можете переопределить метод prepareForReuse в этом классе и сбросить цвет фона (или действительно что-нибудь еще, что вы хотите сбросить) в том же самом.

Убедитесь, что вы звоните [super prepareForReuse] в свою реализацию.

0

От компании Apple документы:

делегат табличного представления в Tableview: cellForRowAtIndexPath: должны всегда сбросить все содержимое при повторном использовании ячейки.

Источник: UITableViewCell Class Reference

Так что будьте уверены, чтобы установить цвет фона там.

Надеюсь, это поможет.

+0

Первое, что я делаю после инициализации ячейки, задает цвет фона. Тогда в случае, если это ячейка «Удалить», я меняю цвет. Или мне нужно установить цвет в каждом случае, если у меня есть для каждой ячейки? –

+0

Если ячейка «Удалить» имеет тот же идентификатор повторного использования, что и следующая ячейка, вы всегда должны установить соответствующий цвет фона. Другим решением может быть наличие отдельного идентификатора повторного использования для ячейки «Удалить». – RaffAl

Смежные вопросы