Xamarin.iOS - 如何隐藏或删除TableViewController

时间:2017-02-22 14:05:24

标签: ios uitableview xamarin xamarin.ios

我需要隐藏或删除TableView中的静态行。

我尝试了几种方法,但没有任何效果。

我试过了:

public override void ViewDidLayoutSubviews()
{
    base.ViewDidLayoutSubviews();

    if ( TableView.NumberOfRowsInSection(0) == 9)
    {
        TableView.CellAt(NSIndexPath.FromItemSection(0, 0)).RemoveFromSuperview();
        TableView.ReloadRows(new NSIndexPath[] { TableView.IndexPathForCell(TableView.CellAt(NSIndexPath.FromItemSection(0, 0))) }, UITableViewRowAnimation.Fade);
    }
}

但是没有工作,单元格继续在TableView中。

我试试这个:

public override void ViewDidLayoutSubviews()
{
    base.ViewDidLayoutSubviews();

    if ( TableView.NumberOfRowsInSection(0) == 9)
    {
        TableView.DeleteRows(new NSIndexPath[] { NSIndexPath.FromItemSection(0, 0) }, UITableViewRowAnimation.None);
    }
}

但抛出了这个异常:

  

Foundation.MonoTouchException:抛出Objective-C异常。名称:   NSInternalInconsistencyException原因:无效更新:无效   第0节中的行数。包含在中的行数   更新后的现有部分(9)必须等于数量   更新前的该部分中包含的行(9),加号或减号   从该部分插入或删除的行数(插入0,   删除1)加上或减去移入或移出的行数   该部分(0移入,0移出)。

之后,我尝试了这个:

public override void ViewDidLayoutSubviews()
{
    base.ViewDidLayoutSubviews();

    if ( TableView.NumberOfRowsInSection(0) == 9)
    {
        TableView.DataSource.CommitEditingStyle(TableView, UITableViewCellEditingStyle.Delete, NSIndexPath.FromItemSection(0, 0));
        TableView.DeleteRows(new NSIndexPath[] { NSIndexPath.FromItemSection(0, 0) }, UITableViewRowAnimation.None);
    }
}

但是现在引发了这个异常:

  

Foundation.MonoTouchException:抛出Objective-C异常。名称:   NSInvalidArgumentException原因: - [DetalheContas   tableView:commitEditingStyle:forRowAtIndexPath:]:unrecognized   选择器发送到实例0x7fd49590

我该怎么办?

1 个答案:

答案 0 :(得分:0)

我不完全确定你为什么要从“ViewDidLayoutSubviews()' ViewDidLayoutSubviews()'中删除表格视图中的单元格?因为这将被多次调用,因此当您尝试删除它时,该单元格将不会始终存在。我在这里假设它确实是一个你试图删除的单元格。这里有一个示例代码片段,用于使用&#f; fade'从表中删除单元格。我可以在上面看到你使用的动画:

YourTableSource.ReplaceSource(SomeData);

SomeTable.BeginUpdates();
SomeTable.DeleteRows(new NSIndexPath[] { NSIndexPath.FromItemSection(0, 0)}, UITableViewRowAnimation.Fade);
SomeTable.EndUpdates();

值得注意的是,您的来源数量必须根据您提交的删除数量而有所不同。