Это связано с повторным использованием ячеек.Вы, вероятно, не различаете разные типы ячеек в своем методе создания ячеек, поэтому одну ячейку, которая ушла за пределы экрана, можно легко использовать для другой (другого типа) ячейки.Кроме того, вы, кажется, добавляете подпредставления снова и снова - делайте это только при создании экземпляра ячейки (с помощью alloc / int), а не при настройке.
Кроме того, для разных типов ячеек используйте разные идентификаторы (выне показывал этот код).
В руководствах по программированию есть хороший пример табличных представлений, их ячеек и шаблона повторного использования.Стоит прочитать пару раз - легко ошибиться и является основной темой для настройки производительности.
Edit
Теперь, когда вы добавили больше кода, другая проблемаКажется, здесь:
if (indexPath.section==1 && indexPath.row==2) {
cell.selectionStyle = UITableViewCellSelectionStyleBlue;
cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;
}
Вам не хватает части else
.selectionStyle
и accessoryType
установлены на то, что они были установлены ранее - вы упускаете возможность правильно настраивать ячейки для всех других ячеек, кроме этой специальной.
Каждый тип ячейки должен действительно получить свой собственный идентификатор, хотя,Если добавление / удаление подпредставлений работает так, как ожидалось, по этому коду трудно сказать.
Одна мысль: так как вы на самом деле не используете много ячеек здесь, вы можете даже отключить повторное использование, изменив
static NSString *kDisplayCell_ID = @"DisplayCellID";
cell = [tableView dequeueReusableCellWithIdentifier:kDisplayCell_ID];
до
static NSString *kDisplayCell_ID = nil;
Это просто всегда будет производить новую ячейку.Я бы не рекомендовал это в общем случае.