TableViewCell内的CollectionView

时间:2019-12-11 15:57:54

标签: ios uitableview xamarin xamarin.ios uicollectionview

我在CollectionView中使用了TableViewCell。一切正常,并按预期显示所有。但是,如果我快速滚动TableView,则将一个集合中的项目(我在collectionView中使用图像)替换为另一个集合中的项目(图像),并在View上覆盖它(在代码al的Debug模式下可以正常工作),展示)。

UITableView GetCell():

public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
    {
        var item = _view.Items[indexPath.Row];
        var cell = (MyTableCell)tableView.DequeueReusableCell(“cell”);
        cell.TextLabelView.Text = item.Title;
        cell.YesButtonView.Hidden = item.IsCategory;
        cell.NoButtonView.Hidden = item.IsCategory;
        if (item.IsImagePoint)
        {
            cell.ImagesCollectionView.DataSource = new ItemsDataSource(item.Images, cell.ImagesCollectionView);
            cell.ImagesCollectionView.Delegate = new ItemsDelegate(item, _view);
        }
        return cell;
    }

UICollectionView GetCell():

public override UICollectionViewCell GetCell(UICollectionView collectionView, NSIndexPath indexPath)
    {
            var cell = (ImageViewCell)_collectionView.DequeueReusableCell(new NSString(“ImageViewCell”), indexPath);
            var image = _images[indexPath.Row];
            var imagePath = image.ThumbnailPath;
            if (!string.IsNullOrEmpty(imagePath))
            {
                cell.ImagePath = imagePath;
            }
            return cell;
    }

2 个答案:

答案 0 :(得分:1)

这可能是由于UITableView中单元的重用系统。配置单元时,您是否正确设置了数据?您叫CollectionView的{​​{1}}吗?

编辑:您应该在配置单元格的reloadData()中调用它。这样,每次重复使用单元格时,您都会更新其内容。

编辑2 :就像我说的那样,请在设置表格视图单元格时尝试添加集合视图tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell。您还必须清理数据源和委托,因为它是一个重用的单元格,因此它可能已经与另一个值一起使用。

reloadData()

答案 1 :(得分:0)

迅速5 将此添加到您的自定义UITableViewCell类中。

override func prepareForReuse() {

        collectionView.dataSource = nil
        collectionView.delegate = nil
        collectionView.reloadData()

        collectionView.dataSource = self
        collectionView.delegate = self
  }