Индексирование ячеек табличного представления при использовании insertRowsAtIndexPaths - PullRequest
0 голосов
/ 23 ноября 2011

Хорошо, я застрял.Это продолжение моего предыдущего поста.Вот что я пытаюсь сделать.

У меня есть кнопка «Редактировать» на панели навигации, которая при нажатии добавляет ячейку в начале моего односекционного табличного представления.Цель этой ячейки, если разрешить использование для добавления новых данных в таблицу;таким образом, его стиль редактирования - Вставка.Для остальных ячеек в таблице настроен стиль редактирования Удалить.

Вот мой метод разделения:

- (IBAction) setEditing:(BOOL)isEditing animated:(BOOL)isAnimated
{
    [super setEditing:isEditing animated:isAnimated];
    // We have to pass this to tableView to put it into editing mode.
    [self.tableView setEditing:isEditing animated:isAnimated];

  // When editing is begun, we are adding and "add..." cell at row 0.
  // When editing is complete, we need to remove the "add..." cell at row 0.
  NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
  NSArray* path = [NSArray arrayWithObject:indexPath];

  // fill paths of insertion rows here
  [self.tableView beginUpdates];
  if( isEditing )
   [self.tableView insertRowsAtIndexPaths:path withRowAnimation:UITableViewRowAnimationBottom];
  else
   [self.tableView deleteRowsAtIndexPaths:path withRowAnimation:UITableViewRowAnimationBottom];
  [self.tableView endUpdates];

  // We nee to reload the table so that the existing table items will be properly 
  // indexed with the addition/removal of the the "add..." cell
  [self.tableView reloadData];
}

Я учитываю эту дополнительную ячейку в своем коде, кроме меня сейчасиметь два пути индекса = [0,0] - новая ячейка и старая исходная первая ячейка в таблице.Если я добавлю вызов для перезагрузки ячейки табличного представления в setEditing, ячейки будут переиндексированы, но теперь мое табличное представление больше не анимировано.

Я хочу свой торт и съесть его тоже.Есть ли другой способ выполнить то, что я пытаюсь сделать, и поддерживать анимацию?

- Джон

1 Ответ

0 голосов
/ 01 декабря 2011

Вы можете делать что хотите, но вам нужно, чтобы ваш источник данных соответствовал таблице. Другими словами, когда таблица перезагружается, tableView:cellForRowAtIndexPath и другие методы UITableViewDataSource и UITableViewDelegate, отвечающие за построение таблицы, должны возвращать те же ячейки в зависимости от состояния редактирования, которое вы добавляете / удаляете в setEditing:antimated:.

Итак, когда вы вставляете / удаляете ячейку в setEditing:animated:, вам также необходимо убедиться, что ваш источник данных отражает те же изменения. Это может быть непросто, если вы добавляете специальную ячейку в начало раздела, но остальные данные поступают из массива. Один из способов сделать это - перезагрузить таблицу, при редактировании сделать строку 0 добавляемой ячейкой и использовать строку-1 для индекса массива для последующих ячеек. Если вы сделаете это, вам также нужно добавить один к tableView:numberOfRowsInSection:, чтобы учесть дополнительную ячейку.

Другим способом было бы иметь раздел для ячейки добавления, в котором было бы 0 строк, если они не редактируются, в противном случае - 1 строка, и вы возвращаете соответствующую ячейку. Это также потребует от вас соответствующей настройки таблицы и ячеек в зависимости от того, как вы хотите, чтобы все выглядело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...