我想根据某个单元格是否有针对特定用户的任何数据来隐藏它。我当前的方法导致错误the requested operation resulted in a stack overflow
。
public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{
...
cell.TextLabel.Text = items.Keys.ElementAt(indexPath.Row);
cell.DetailTextLabel.Text = items[items.Keys.ElementAt(indexPath.Row)];
if (string.IsNullOrEmpty(cell.DetailTextLabel.Text)){
cell.Hidden = true;
cell.Tag = 3;
}
return cell;
}
public override nfloat GetHeightForRow(UITableView tableView, NSIndexPath indexPath)
{
UITableViewCell cell = tableView.CellAt(indexPath); //ERROR HERE
if (cell.Tag == 3)
{
return 0;
}
return base.GetHeightForRow(tableView, indexPath);
}
如何避免此错误并正确隐藏行?
最佳答案
我的猜测是GetCell()
调用GetHeightForRow()
,调用GetCell()
调用GetHeightForRow()
…这就是堆栈溢出的来源。
您不应使用视觉表示形式(=单元格)来确定行是否应可见。您的(数据)模型应对此负责。换句话说:无论您的items
字典包含什么对象类型(也许是Person
类型-我不知道),它都应该具有IsVisible
属性或类似属性。然后,在GetHeightForRow()
中,您可以访问该项目并检查属性,并确定行高是多少,并为不可见的行返回0。
顺便说一句:我不知道(*)上面的代码上下文,但是通常您不应该调用base.GetHeightForRow()
。该方法本身就是作为ObjectiveC协议实现的委托的一部分。这意味着,没有base
。
(*)如果从UITableViewSource
或UITableViewDataSource
派生,则在调用base
时没有副作用,但是如果直接在UITableViewController
中实现方法,则可能会看到You_Should_Not_Call_Base_Exception
。
关于ios - 在UITableView中隐藏单元格(在Xamarin中),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39709601/