1

我正在尝试在 uitableview 中实现“滑动删除”功能。我关注了其他教程/论坛和扩展的 UITableViewSource。在该类中,我重写了以下方法:

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

public override UITableViewCellEditingStyle EditingStyleForRow(UITableView tableView, NSIndexPath indexPath)
{
    return UITableViewCellEditingStyle.Delete;
}

public override bool CanEditRow(UITableView tableView, NSIndexPath indexPath)
{
    return true;
}

我相信这些是我应该需要的唯一方法。但是,当我执行滑动手势时,会调用 CanEditRow 和 EditingStyleForRow 方法,但永远不会调用 CommitEditingStyle。任何帮助将非常感激。谢谢。

4

2 回答 2

2

我在回答我自己的问题。事实证明我的列表视图比它的容器大,所以删除按钮只是隐藏在屏幕外。面掌。

sblom 了解哪些事件会被触发,这对我有很大帮助。好资料。

于 2012-07-26T18:31:19.250 回答
1

据我所知,你需要override CommitEditingStyle为了完成这项工作。只要您在滑动其中一行时看到删除按钮出现,您就有一个非常强烈的迹象表明所有棘手的部分都在工作。如果您在滑动时没有看到删除按钮,我们应该集中精力找出它为什么是擅离职守。

从技术上讲,CanEditRowis on the UITableViewDataSourceprotocol 和EditingStyleForRowis on UITableViewDelegate,所以如果这两个确实被调用,我们可以排除诸如你UITableViewSource只被分配到DataSourceDelegate而不是被分配到组合Source属性的问题。

于 2012-07-26T03:53:04.630 回答