繁体   English   中英

iOS 8 Swift UICollectionView reloadData()导致视图(图像)跳转单元格

[英]iOS 8 Swift UICollectionView reloadData() causing views (images) to jump cells

我有一个UICollectionView 20个细胞与imageView人里面。 当用户点击了正确的电池,我得出另一个imageView在该单元格(一个correctCircle让我们称呼它)。 这很好用。

但是我在UICollectionView中也有一个标题,我在那里问他们需要回答的问题。 每次点击(等待2秒)后,问题应该更新,我有一个更新标题文本标签的功能,这也可以正常工作。

我的问题是:为了更新Header文本,我必须调用uicollectionView.reloadData() ,每当我这样做时,我在单元格中绘制的UIImageView (correctCircle)被移动到另一个单元格!

我已经尝试了我能想到的一切,包括这个线程中的解决方案: UICollectionView reloadData在iOS 7中无法正常运行

但无法让它发挥作用。 任何想法都非常受欢迎。 理想情况下,我只刷新标题而不是其他细胞,但似乎没有办法做到这一点。

编辑:根据评论稍微改变代码,现在我在每个单元格中有2个图像,一个是隐藏的,然后我显示它,而不是在点击时添加一个imageView

这是一些相关的代码:

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as CollectionViewIconCell    

        // bigIcon() just returns the animal's icon image
        cell.icon.image = animalsArray[indexPath.row].bigIcon()

        return cell
    }

override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
        // we cannot use a dequeueReusableCellWithReuseIdentifier, we need this
        let cell = collectionView.cellForItemAtIndexPath(indexPath) as CollectionViewIconCell

        if currentAnimal == self.correctAnimal {
            cell.circleImage.image = correctCircleImage
            cell.circleImage.hidden = false

            correctAnswers++

            // nextQuestion() simply loads the text that will go in the Header.label
            self.nextQuestion()
            self.collectionView!.reloadData()

        } else {
            self.answerCircle.image = UIImage(named: "wrongCircle")
            self.answerCircle.sizeToFit()
            cell.addSubview(answerCircle)

            self.nextQuestion()
            self.collectionView!.reloadData()
        }        
    }

谢谢。

PS

阅读一些评论,也许我没有在新问题上正确设置标题的文本? 我从教程中获得了所有这些代码,非常新的UICollectionView所以请原谅我的无知,但是有更好的方法来刷新标题文本吗? 我无法获取viewForSupplementaryElementOfKind函数之外的标题。

我应该解释一下,我有2个不同的imageViews,一个用于正确答案,一个用于错误答案,因为正确答案的循环应该保留,而错误答案的那个将在每个问题上删除并重复使用。

您的问题不在显示的代码中,它位于代码中,在请求时返回单元格,特别是因为您没有通过设置两个图像视图的状态来完全更新它。 因此,当单元格被重用时,它具有来自另一行的错误(旧)设置。

真的是数据模型和单元设计问题。 单元格应始终具有2个图像视图,您应该根据需要进行显示或隐藏,并且需要从每个用户选择后更新的数据模型中确定,然后重新加载(只需更新单元格,而不是完全重新加载) )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM