可编辑的UITableViewCell - EditingStyleForRow()未被调用

时间:2011-02-10 11:06:47

标签: uitableview xamarin.ios

我正在尝试实现可删除的UITableViewCells。我的UITableView有3个部分。第1部分包含List的每个元素的一个单元格(为简单起见称为项目)。每个单元格都添加了各种元素(UILabel和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出现,没有达到任何断点。

所有其他代表的工作正常。表格内容按预期显示,只是不可编辑/可删除。

有关我做错的任何提示?提前谢谢。

修改

Apple文档说如果未实现委托方法,将为可编辑单元格设置UITableViewCellEditingStyle.Delete。但如果没有这种方法,它就无法工作。

编辑2:

感谢Ratinhos提示,现在调用EditingStyleForRow()并正确返回UITableViewCellEditingStyle.Delete,但删除控件仍然没有出现。

2 个答案:

答案 0 :(得分:1)

你调用了吗:

[tableView setEditing:animated:]

答案 1 :(得分:0)

现在有效。我完全删除了那些:

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

此外,似乎并不需要CanEditRow()。剩下的就是tableView.Editing = true以及EditingStyleForRow()和CommitEditingStyle()的实现。