UICollectionView reloadData ghost单元格

时间:2013-07-03 09:38:10

标签: ios cells reloaddata collectionview

我来到这里是因为我的UICollectionView有一个非常奇怪的问题。

Imgur相册所有屏幕我想分享http://imgur.com/a/v3sox

首先,这是我的应用程序看起来没有问题:专辑的图像2。

请注意右上角的刷新按钮,这是给我带来问题的按钮。

当我非常快速地向下滚动UICollectionView,并在收集视图仍在滚动时按“刷新”,我有“细胞剩余”,它不属于任何人,只是停留在屏幕上。 (例如:专辑的图像1)

我不明白发生了什么,因为在我的刷新方法中我有:

- (void)refreshData
{
  //A bunch of code before I reset the data
  dispatch_async(dispatch_get_main_queue(), ^{
        //Reset data
        currentProjects = nil;
        [self.projectsCollectionView reloadData];

        //Some other stuff concerning the little "Chargement..." view
  };
}

然后单元格继续在我的屏幕上保留在每个文件夹上,所以如果我选择另一个文件夹,我将获得相册的图像3(注意最后4个单元格的标签,它们是混合的,因为之前的当它们不应该在屏幕上时,它们仍然在屏幕上。)

有没有人知道可能导致这种情况的原因?非常感谢你的时间

P.S:对不起,我把所有的屏幕放在一张专辑中,不能发布超过2个链接,所以我不得不即兴发挥

2 个答案:

答案 0 :(得分:2)

也遇到了同样的问题。我通过修改UICollectionViewCell来解决它。

(注意:我的代码是使用MonoTouch的c#。)

每次单元格创建对象之前

。即

textView = new UITextField()
{
    BackgroundColor = UIColor.Clear,
    TextColor = UIColor.LightGray,
    Text = Title
};

修复它,检查对象,并相应地更新它。

if (textView == null)
{
    textView = new UITextField()
    {
        BackgroundColor = UIColor.Clear,
        TextColor = UIColor.LightGray,
        Text = Title
    };
}
else
    textView.Text = Title;

现在当在CollectionView上调用重载数据时,它会正确重新加载。

答案 1 :(得分:0)

我曾经遇到过类似的问题。问题是我的自定义单元格一次又一次地创建子视图。

根据我的猜测,您应该更改标签的值,而不是在出列后重新创建它。