我正在尝试实现可删除的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,但删除控件仍然没有出现。
答案 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()的实现。