Ваше предположение, что это связано с повторным использованием ячеек, верно.Первое, что я заметил, это то, что вы используете один и тот же идентификатор ячейки для всех ваших ячеек.Это означает, что все ячейки считаются одинаковыми, и вы должны предполагать, что все в ячейке должно быть настроено каждый раз.Было бы проще использовать разные идентификаторы для разных типов ячеек, но я позволю вам немного потренироваться ...
В любом случае, корень вашей проблемы в следующем коде:
if (section ==3){
cell =nil;
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
if (indexPath.row ==0){
cell.backgroundColor = [UIColor clearColor];
cell.contentMode = UIViewContentModeScaleToFill;
[cell.contentView addSubview:self.footerView];
}
}
Для этой конкретной ячейки вы устанавливаете цвет фона, чтобы очистить, добавляете footerView и т. Д. Но вы не устанавливаете цвет фона ни для одной из других ячеек, так как только этот конкретныйЯчейка может быть повторно использована в другой позиции, вы получите чистый фон и другие изменения в этой позиции.
Теперь, вероятно, будет легче понять, почему вы можете использовать разные идентификаторы ячеек.для разных типов клеток.Если для прозрачных ячеек вы используете другой идентификатор, чем для белых, вам не нужно беспокоиться о том, что прозрачные ячейки перерабатываются в виде белых и наоборот.Вы должны использовать разные идентификаторы для каждого «типа ячейки», где «тип ячейки» определяется всеми атрибутами ячейки, которые вам не нужно настраивать при каждом повторном использовании ячейки.
You 'Вы выполняете большую работу в вашем -reuseTableViewCellWithIdentifier:withIndexPath:
методе, который в итоге делает ячейки не очень многоразовыми.Вместо этого вы должны идентифицировать каждый отдельный «тип» или «стиль» ячейки, которую вы хотите отображать независимо от конкретной информации, отображаемой в них.Например, все ячейки в первых трех разделах выглядят примерно одинаково: все они похожи на стандартный стиль ячейки UITableViewCellStyleValue1
, за исключением того, что метка сведений оставлена пустой и текстовое поле добавлено с правой стороны.,Тогда используйте один и тот же идентификатор повторного использования для всех этих ячеек.-reuseTableViewCellWithIdentifier:withIndexPath:
действительно не должно заботиться о пути индекса - он должен просто создать и вернуть ячейку в требуемом стиле, как определено предоставленным идентификатором повторного использования.Оставьте работу по настройке текста полей в этих ячейках для метода -tableView:cellForRowAtIndexPath:
.
Я заметил, что вы сохраняете путь индекса и указатель на текстовое поле при создании каждой ячейки.Ничто из этого не поможет, если вы повторно используете ячейки.
Если вы никогда не собираетесь добавлять больше ячеек в таблицу, чем те, которые вы показывали, вам может быть прощепросто пропустите всю вещь повторного использования.Повторное использование ячеек дает заметное улучшение производительности при прокрутке таблицы с десятками или сотнями ячеек, но если у вас никогда не будет больше десяти или пятнадцати ячеек, а половина из них будет на экране в любой момент времени, преимущество повторного использованияклетки не так уж велики.Тем не менее, я бы посоветовал вам потратить время, чтобы обдумать идею;рано или поздно вам захочется создать таблицу с множеством строк.