Xamarin.iOS - 如何隐藏或删除TableViewController中的静态单元格
问题描述:
我需要隐藏或删除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
我该怎么办?
答
我不完全确定你为什么试图从'ViewDidLayoutSubviews()'的表格视图中移除一个单元格,因为这将被多次调用,因此当您尝试去掉它。我在这里做一个假设,它确实是一个你试图删除的单元格。不管这里是使用了“淡出”的动画,我可以使用上面看到你从一个表中删除的小区的示例代码片段:
YourTableSource.ReplaceSource(SomeData);
SomeTable.BeginUpdates();
SomeTable.DeleteRows(new NSIndexPath[] { NSIndexPath.FromItemSection(0, 0)}, UITableViewRowAnimation.Fade);
SomeTable.EndUpdates();
值得注意的是,你的源数量必须删除的数量不同你正在提交。
我有一个数据应该只出现在特定的条件下,请记住:我正在使用静态单元格。我试过你的例子,但是这个错误出现了“Foundation.MonoTouchException:抛出的Objective-C异常。名称:NSInternalInconsistencyException原因:无效的更新:部分0中的行数无效。更新后现有部分中包含的行数(10)必须等于更新之前该部分中包含的行数(10),加上或减去从该部分插入或删除的行数(0插入,1删除)“ – Lnacer
我尝试过ViewDidLayoutSubviews(),该方法我应该尝试使用吗? viewWillAppear中()? – Lnacer
是'ViewWillAppear()'可以说是更实际的解决方案,因为它理论上应该只在UIViewController初始化时发生一次。您收到的错误消息是因为您没有从桌面视图源中移除任何项目。仅仅因为它们是静态的并不意味着你无法从Tableviews源代码中删除并重新添加它们。除非有特定原因你不想这样做。 – Digitalsa1nt