это не ошибка: это особенность;) потому что ячейки используются повторно.
Если ваше табличное представление содержит 200 ячеек и ваш iphone способен отображать 5 ячеек одновременно, тогда вы толькоесть 5-6 экземпляров UITableViewCell
.Если вы прокручиваете ячейку вниз, она получает кнопку раскрытия, а если вы прокручиваете назад, ячейка используется повторно, и в результате кнопка раскрытия все еще остается.
для решения вашей проблемы:
подход 1: не только установить кнопку раскрытия на последней ячейке.Вы также должны удалить / сбросить его в других ячейках.
подход 2: кажется, что последняя ячейка является другим типом ячейки в семантике.Поэтому выберите идентификатор повторного использования, например: @"MyLastCell
для последней ячейки и @"MyCell"
для всех остальных ячеек.В результате ваше табличное представление будет повторно использовать только ячейки одного типа (в вашем случае: с / без кнопки раскрытия)
edit 1: некоторый образец-псевдокод для подхода 2; редактировать 3: более короткое решение для захода на посадку 2
static NSString *CellIdentifier = @"Cell";
static NSString *LastCellIdentifier = @"LastCell";
bool isLastRow = (indexPath.row == numRows-1);
NSString *usedCellIdentifier = isLastRow ? LastCellIdentifier : CellIdentifier;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: usedCellIdentifier];
if(!cell)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:usedCellIdentifier] autorelease];
if(isLastCell)
{
//do disclosure-stuff here. Or add a UIButton here
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton
}
}
редактировать 2 : пример кода для захода на посадку 1
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
cell.accessoryType = (idexPath.row == numRows-1) ?
UITableViewCellAccessoryDetailDisclosureButton
: UITableViewCellAccessoryNone ;