使用didSelect方法更改自定义CollectionViewCell中的UI元素

时间:2018-02-21 18:26:14

标签: swift uicollectionview

我正在制作一个简单的闪卡应用程序。卡片被加载到集合视图中。当有人点击卡片时,我想要进行旋转动画,并将文本标签更改为答案。

func animateRotationY(view: UIImageView) {
    let animation = CABasicAnimation(keyPath: "transform.rotation.y")
    let angleRadian = CGFloat.pi * 2
    animation.fromValue = 0
    animation.byValue = angleRadian
    animation.toValue = angleRadian
    animation.duration = 1.0
    animation.repeatCount = 1
    view.layer.add(animation, forKey: nil)

}

我在didSelect方法中调用这个动画函数

extension FlashCardsViewController: UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

        let cell = flashCardsView.collectionView.dequeueReusableCell(withReuseIdentifier: "FlashCardCell", for: indexPath) as! FlashCardCollectionViewCell

        let row = indexPath.row
        let selectedCard = flashCards[row]
        animateRotationY(view: cell.imageView)
    selectedIndexPath = row
        cell.textLabel.text = selectedCard.answer
    self.flashCardsView.collectionView.reloadData()

}

问题是,不仅动画不会显示,而且即使断点正在击中那些行,textLabel也不会更新。有没有人知道如何在didSelect中更新UI?

1 个答案:

答案 0 :(得分:1)

当您致电dequeueReusableCell(withReuseIdentifier:for:)时,您没有获得已经显示的单元格并且您想要更改。

您应该致电flashCardsView.collectionView.cellForItem(at: indexPath)

此外,调用reloadData()会导致为每个索引路径调用collectionView(_:cellForItemAt:),这可能会覆盖您在选择单元格后所做的任何更改。