Это проблема повторного использования ячейки . Вам необходимо каждый раз сбрасывать / устанавливать каждое свойство ячейки, когда вы повторно используете ячейки таблицы.
Например, cell.accessoryView - это то, что произошло в прошлый раз, когда ячейка использовалась в последний раз. Попробуйте установить его как ноль.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
// Creating NEW cell
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
// Now you are using either NEW or OLD cell
// You MUST set each cell property that can be different
// code to customize cell for certain purpose
return cell;
}
В зависимости от раздела и строки вы, кажется, устанавливаете cell.textLabel.font, cell.textLabel.text, cell.accessoryView, cell.contentView.backgroundColor, cel.textLabel.backgroundColor и т. Д.
Повторное использование ячейки означает, что иногда вы получаете старую ячейку, КАК ЭТО БЫЛО ИСПОЛЬЗОВАНО в прошлый раз . Поэтому вам нужно установить все те значения, которые вы установили ранее. Если некоторые значения всегда одинаковы, определите их только один раз при создании новой ячейки ветви.
Да, это много работы. Вы можете изменить все эти длинные предложения if для переключения случаев, начать использовать предопределенные массивы, доступ к которым осуществляется через индексы, и, возможно, XIB Interface Builder для разных ячеек. Вы также можете использовать несколько разных cellIdentifiers для разных типов ячеек, если хотите. В этом случае повторное использование менее проблематично, но проще ошибаться ...