UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
Эта строка говорит вашему приложению повторно использовать существующие внеэкранные ячейки, если они существуют. Таким образом, вы берете уже существующую ячейку и добавляете в нее новое подпредставление в том же месте, в котором оно уже завершено. Вам нужно очистить существующие подпредставления перед добавлением нового подпредставления.
Обновление в ответ на ваш комментарий:
код jan удалит существующие подпредставления. Вы добавили бы его в свой код выше как условие else вашего оператора if cell is nil.
Таким образом, если у вас нет доступной для повторного использования ячейки (ячейка == ноль), ваш код создаст новую, иначе ваш код удалит старые подпредставления из существующей ячейки:
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.textLabel.font = [UIFont boldSystemFontOfSize:12];
}
else {
UIView* subview;
while ((subview = [[[cell contentView] subviews] lastObject]) != nil)
[subview removeFromSuperview];
}
альтернативный, более краткий способ достижения того же самого:
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.textLabel.font = [UIFont boldSystemFontOfSize:12];
}
else {
[[[cell contentView] subviews] makeObjectsPerformSelector: @selector(removeFromSuperview)];
}