2017-02-22 101 views
0

我需要隐藏或删除TableView中的静态行。Xamarin.iOS - 如何隐藏或删除TableViewController中的静态单元格

我已经尝试了几种方法,但没有任何工作。

我尝试这样做:

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:]:无法识别 选择发送到实例0x7fd49590

我该怎么办?

回答

0

我不完全确定你为什么试图从'ViewDidLayoutSubviews()'的表格视图中移除一个单元格,因为这将被多次调用,因此当您尝试去掉它。我在这里做一个假设,它确实是一个你试图删除的单元格。不管这里是使用了“淡出”的动画,我可以使用上面看到你从一个表中删除的小区的示例代码片段:

YourTableSource.ReplaceSource(SomeData); 

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

值得注意的是,你的源数量必须删除的数量不同你正在提交。

+0

我有一个数据应该只出现在特定的条件下,请记住:我正在使用静态单元格。我试过你的例子,但是这个错误出现了“Foundation.MonoTouchException:抛出的Objective-C异常。名称:NSInternalInconsistencyException原因:无效的更新:部分0中的行数无效。更新后现有部分中包含的行数(10)必须等于更新之前该部分中包含的行数(10),加上或减去从该部分插入或删除的行数(0插入,1删除)“ – Lnacer

+0

我尝试过ViewDidLayoutSubviews(),该方法我应该尝试使用吗? viewWillAppear中()? – Lnacer

+0

是'ViewWillAppear()'可以说是更实际的解决方案,因为它理论上应该只在UIViewController初始化时发生一次。您收到的错误消息是因为您没有从桌面视图源中移除任何项目。仅仅因为它们是静态的并不意味着你无法从Tableviews源代码中删除并重新添加它们。除非有特定原因你不想这样做。 – Digitalsa1nt