ios - Swift UICollectionView 在点击时更新单元格标签而不是实时更新

标签 ios swift uicollectionview reloaddata

一段时间以来,我一直在努力弄清楚如何实时更新 uicollectionview。

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

我无法弄清楚如何让它到达用户选择其中一个单元格的地步,以便在用户面前实时更新该单元格的内容。根据单元格上的点击具体使标签文本变为粗体而不是粗体。

这是我在 swift 中设置的标签:

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

最佳答案

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

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

关于ios - Swift UICollectionView 在点击时更新单元格标签而不是实时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55270763/

相关文章:

objective-c - 如何获得默认的 UICollectionView 单元格大小?

ios - 如何跟踪 iPhone 应用程序安装和引荐来源网址

SwiftUI 条件列表 - 无法推断复杂的闭包返回类型

swift - 我们可以在服务器上编译 CoreML 模型吗?

ios - Firebase addStateDidChangeListener

objective-c - CollectionView iOS 7 问题

ios - 为什么在使用 initWithNibName 时需要 setNeedsDisplay

ios - CKAsset (NSData) 到 UIWebView 与 ActivityViewController 共享

objective-c - iphone 中的语言翻译

ios - 填充 UICollectionView 不工作