我们已经设置了我们的 tableviewSource 和一个 tableview,但是在滚动大量单元格时,数据出现在错误的单元格中并且选择状态被应用于多个单元格时遇到了问题。
表格单元格是根据关于表格单元格/表格视图的n+1教程设置的,并且仅当表格的一部分由于大小而被隐藏时才会出现问题。
关于如何解决这个问题的任何想法?
var menuItem = item as MenuItemViewModel;
if (menuItem != null && menuItem.ViewModelType == null)
{
NSString cellId = new NSString("Menu Header Cell");
var headerCell = tableView.DequeueReusableCell(cellId, indexPath) as MenuItemHeaderCell;
if (headerCell == null)
{
headerCell = new UITableViewCell(UITableViewCellStyle.Default, cellId) as MenuItemHeaderCell;
}
return headerCell;
}
else
{
NSString cellId = new NSString("Menu Cell");
var cell = tableView.DequeueReusableCell(cellId, indexPath) as MenuItemCell;
if (cell == null)
{
cell = new UITableViewCell(UITableViewCellStyle.Default, cellId) as MenuItemCell;
}
return cell;
}
根据您的评论,我已将代码更新如下:
private static readonly NSString MenuHeaderCellIdentifier = new NSString("Menu Header Cell"); 私有静态只读 NSString MenuItemCellIdentifier = new NSString("Menu Cell");
public MenuTableViewSource(UITableView tableView): base(tableView)
{
tableView.RegisterClassForCellReuse(typeof(MenuItemHeaderCell), MenuHeaderCellIdentifier);
tableView.RegisterClassForCellReuse(typeof(MenuItemCell), MenuItemCellIdentifier);
}
protected override UITableViewCell GetOrCreateCellFor(UITableView tableView, NSIndexPath indexPath, object item)
{
NSString cellIdentifier;
var menuItem = item as MenuItemViewModel;
if (menuItem.ViewModelType == null)
{
cellIdentifier = MenuHeaderCellIdentifier;
}
else
{
cellIdentifier = MenuItemCellIdentifier;
}
var cell = (UITableViewCell)TableView.DequeueReusableCell(cellIdentifier, indexPath);
return cell;
}
绑定设置如下:
var source = new MenuTableViewSource(TableView);
TableView.Source = source;
TableView.RowHeight = 46;
var set = this.CreateBindingSet<LeftMenuView, LeftMenuViewModel>();
set.Bind(source).To(vm => vm.MenuItems);
set.Apply();
TableView.ReloadData();
重复使用问题仍在发生。基本上,如果单元格不在屏幕上,它们在滚动时开始获取不正确的值。还有什么我们应该做的吗?