Swift UICollectionView单击时更新单元格标签不实时更新

时间:2019-03-20 21:55:23

标签: ios swift uicollectionview reloaddata

一段时间以来,我一直在试图找出如何实时更新uicollectionview的方法。

我试图使用reloadData,reloadItems和reloadSections使用多种不同的方法来完成此操作。不使用DispatchQueue.main.async。

我无法弄清楚如何使它达到当用户选择一个单元格时,如何更新位于用户面前的该单元格的内容。具体而言,根据单元格的点击次数,将标签文本设为粗体,而不是粗体。

这是我迅速设置的标签:

let nameLabel: UILabel = {
    let label = UILabel()
    label.text = ""
    return label
}()

这是collectionview的didselectitem

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let cell = collectionView.cellForItem(at: indexPath) as! FilterCollectionViewCell
    let selected = ViewController.brands[indexPath.item]
    if FilterLauncher.selectedOptions.contains(selected){
        let loc = FilterLauncher.selectedOptions.firstIndex(of: selected)
        FilterLauncher.selectedOptions.remove(at: loc!)
        cell.nameLabel.font = UIFont.boldSystemFont(ofSize: 2.0)
        DispatchQueue.main.async {
            collectionView.reloadItems(at: [indexPath])
        }
    }
    else{
        FilterLauncher.selectedOptions.append(selected)
        cell.nameLabel.font = UIFont.boldSystemFont(ofSize: 15.0)
        DispatchQueue.main.async{
             self.collectionView.reloadItems(at: [indexPath])}

    }
}

它最终会将所选单元格的文本更改为粗体,但会延迟执行。当我尝试选择第一个粗体字的单元格时,我需要选择另一个单元格。当我第一次选择单元格时,它会闪烁我想要的更改,然后返回。

Collection View select cell change text example

1 个答案:

答案 0 :(得分:0)

我认为您在选择collectionView.reloadItems(at: [indexPath])之后无需致电。直接访问单元的标签应该进行更改,而不必重新加载单元。

我的猜测是,您在cellForItemAt中有一些出列代码将字体设置为正常,因此,当您点击一个单元格时,其标签将设置为粗体,但是当您将其设置为正常时,重新加载它。