无法将 UILabel 添加到 UICollectionViewCell

Posted

技术标签:

【中文标题】无法将 UILabel 添加到 UICollectionViewCell【英文标题】:Can't add UILabel to UICollectionViewCell 【发布时间】:2018-02-03 19:04:43 【问题描述】:

我正在尝试将 UILabel 添加到自定义 UICollectionViewCell。在我的 UICollectionViewCell 上,我创建了一个方法,该方法将实例化并将 UILabel 添加到其中:

class VideoCell: UICollectionViewCell 

    func showOptions() 
        let label = UILabel(frame: CGRect(x: 0, y: 0, width: 50, height: 25))
        label.text = "test"
        contentView.addSubview(label)
    


所以,当点击单元格时,我将调用这个方法:

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
    guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as? VideoCell else 
        fatalError("Wrong instance for dequeued cell")
    
    cell.showOptions()

虽然没有出现错误,但是标签并没有出现在单元格中。

我错过了什么吗?

【问题讨论】:

【参考方案1】:

错误在这里

guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as? VideoCell else 
    fatalError("Wrong instance for dequeued cell")

您必须使用 cellForItemAtIndexPath 来返回该单元格,而不是通过出队方式

【讨论】:

【参考方案2】:

详细说明@Sh_Khan 的答案,代码应如下所示:-

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as? VideoCell
    return cell ?? UICollectionViewCell()


func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
    guard let cell = collectionView.cellForItem(at: indexPath) as? VideoCell else 
        fatalError("Wrong instance for dequeued cell")
    
    cell.showOptions()

【讨论】:

以上是关于无法将 UILabel 添加到 UICollectionViewCell的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将 UILabel 和 UIImageViews 添加到 UIScrollView

无法在 IOS 6 中将 UILabel 添加到 UITableViewCell

无法从 UILabel 切换到 ViewController

无法在 UICollectionView 中修改 UILabel 框架?

ios:如何在背景图像上添加 uiLabel?

使用 ShareKit 将 UILabel 传递给 Facebook