Неправильные элементы управления, отображаемые в UITableView - PullRequest
1 голос
/ 25 мая 2010

У меня странная проблема с UITableView. Когда пользователь нажимает кнопку «Редактировать», в табличном представлении (представляющем собой групповое представление с несколькими разделами) должны отображаться кнопки удаления для каждой строки, за исключением последней строки в каждом разделе, которая имеет зеленую кнопку добавления.

Когда пользователь нажимает зеленую кнопку, вставляется новая строка, но теперь последняя строка получает кнопку удаления. Еще более странно, что кнопка удаления ACTS похожа на кнопку добавления. Так что кажется, что есть проблема с рисованием, а не проблема в назначении правильного стиля. (Обширный NSLogging показывает, что последняя ячейка получает стиль редактирования Вставить правильно.)

Я попытался установить setNeedsDisplay для ячейки и tableView, я попытался перезагрузить этот раздел / строку / всю таблицу, но проблема остается. Любые идеи о том, как заставить UITableView явно перерисовать элементы управления редактированием?

Ответы [ 2 ]

1 голос
/ 20 ноября 2012

У меня была такая же проблема. Похоже, клетки слишком много раз используются ...

Вы можете исправить это, установив новые ячейки для вставленных ячеек, используя разные идентификаторы:

if([tableView isEditing] && indexPath.row == [items count]){
    static NSString *CellIdentifier = @"AddCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // "add-cell" setup here.. e.g"
    [[cell textLabel] setText:@"Tab to add new item"];

    return cell;
}else{
    static NSString *CellIdentifier = @"NormalCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // normal cell setup here..

    return cell;
}
0 голосов
/ 30 августа 2010

Я почти уверен, что вы можете просто реализовать это в своем делегате UITableView, чтобы предотвратить редактирование последней строки:


-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
  // Return NO if you do not want the specified item to be editable.
  if (indexPath.row != lastRow) // whatever your last row is
    return YES;
  }
  return NO;
}
...