Редактируемый UITableViewCell - EditingStyleForRow () не вызывается - PullRequest
1 голос
/ 10 февраля 2011

Я пытаюсь реализовать удаляемый UITableViewCells. Мой UITableView имеет 3 раздела. 1-й раздел содержит одну ячейку для каждого элемента списка (называемые элементы для простоты). Различные элементы (UILabels и UIButton) добавляются в каждую ячейку.

Как и большинство статей в Интернете, в моем коде реализованы методы делегата, отвечающие за редактирование ячеек:

public override bool CanEditRow(UITableView tableView, NSIndexPath indexPath) {
  if (indexPath.Section == 0 && items.Count > 0) {
    return true;
  }
  return false;
}

public override UITableViewCellEditingStyle EditingStyleForRow(UITableView tableView, NSIndexPath indexPath) {
  if (indexPath.Section == 0 && items.Count > 0) {
    return UITableViewCellEditingStyle.Delete;
  }
  return UITableViewCellEditingStyle.None;
}

public override void CommitEditingStyle(UITableView tableView, UITableViewCellEditingStyle editingStyle, NSIndexPath indexPath) {
  if (editingStyle == UITableViewCellEditingStyle.Delete) {
    items.RemoveAt(indexPath.Row);
    tableView.DeleteRows(new NSIndexPath[] { indexPath }, UITableViewRowAnimation.None);
  }
}

Вопрос о том, является ли ячейка редактируемой / удаляемой, определяется в GetCell ():

public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) {
  string cellIdentifier;
  UITableViewCell cell;

  if (indexPath.Section == 0) {
    if (items.Count == 0) {
      // Generate a "No data here..." cell
      ...
     } else {
      cellIdentifier = "ItemCell";

      cell = tableView.DequeueReusableCell(cellIdentifier);
      if (cell == null) {
        // Create a new cell
        ...
      }

      cell.Editing = true; // Make the cell deletable
      cell.ShouldIndentWhileEditing = true;
      cell.ShowingDeleteConfirmation = true;

      // Assign item values to the cell
      ...
    }
  } else if (...) { // Other sections go here
  }
  return cell;
}

Размещение Console.Writes и точки останова повсюду заставили меня поверить, что метод делегирования EditingStyleForRow () даже не вызывается. Ни одна из них не была Console.Writes обнаружился, там не было ни одной точки останова.

Все остальные делегаты работают нормально, хотя. Содержимое таблицы отображается, как и ожидалось, но не доступно для редактирования / удаления.

Любые намеки на то, что я делаю неправильно? Заранее спасибо.

EDIT:

Документы Apple говорят, что UITableViewCellEditingStyle.Delete будет установлен для редактируемых ячеек, если метод делегата не реализован. Но это не работает и без метода.

РЕДАКТИРОВАТЬ 2:

Благодаря подсказке Ратиньюса EditingStyleForRow () теперь вызывается и правильно возвращает UITableViewCellEditingStyle.Delete, но элементы управления удалением по-прежнему не отображаются.

Ответы [ 2 ]

1 голос
/ 10 февраля 2011

вы вызывали:

[tableView setEditing:animated:]

0 голосов
/ 10 февраля 2011

Теперь работает. Я полностью удалил те:

cell.Editing = true; // Make the cell deletable
cell.ShouldIndentWhileEditing = true;
cell.ShowingDeleteConfirmation = true;

Кроме того, CanEditRow () действительно не требуется. Все, что осталось, это tableView.Editing = true и реализации EditingStyleForRow () и CommitEditingStyle ().

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