在我的应用程序中,我有很多列表,并且每次我要确保始终有一个默认单元格来确保安全。因此,每次在应用程序中创建列表时,都会在tableView中重新创建一个空单元格。
除了将XIB用于可重用性之外,我看不到任何解决方案。
答案 0 :(得分:0)
您需要创建一个TableSourceBase来管理DefaultEmptyCell和应用程序公用的任何其他单元。 这里的技巧是在使用它们之前产生所有xib。否则会崩溃。
public abstract class TableViewSourceBase : UITableViewSource
{
protected const string DefaultEmptyCellIdentifier = "DefaultEmptyCell";
protected virtual IEnumerable<(UINib, string)> GetNibsForCellReuse()
{
yield return (UINib.FromName(DefaultEmptyCellIdentifier, null), DefaultEmptyCellIdentifier);
}
public void RegisterNibs(UITableView tableView)
{
foreach (var (xib, key) in GetNibsForCellReuse())
{
tableView.RegisterNibForCellReuse(xib, key);
}
}
public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{
UITableViewCell cell = null;
cell = (DefaultEmptyCell)tableView.DequeueReusableCell(DefaultEmptyCellIdentifier);
return cell;
}
public override nint RowsInSection(UITableView tableview, nint section)
{
return 0;
}
}
现在我们有了我们的基类
您可以在每个TableSource中管理空单元格。
public class ListTableViewSource : TableViewSourceBase
{
private const string SimpleCellIdentifier = "SimpleCell";
public ListTableViewSource()
{
}
public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{
UITableViewCell cell = null;
if (indexPath.Row >= [COUNT])
return base.GetCell(tableView, indexPath);
//Load your other cells here according to your need
return cell;
}
protected override IEnumerable<(UINib, string)> GetNibsForCellReuse()
{
yield return (UINib.FromName(SimpleCellIdentifier, null), SimpleCellIdentifier);
foreach (var tuple in base.GetNibsForCellReuse())
{
yield return tuple;
}
}
}
就像您不必费心启动Xib一样,处理您的标识符也很简单。