Xcode9.2、Swift4下UICollectionViewCell子类报错:输出口无法连接重复内容
解决CollectionView单元格Label访问报错的问题
嘿,我之前在Xcode 9.2 + Swift 4环境下也踩过几乎一模一样的坑!结合你描述的操作步骤,大概率是这几个常见问题导致的,咱们一步步来排查解决:
最可能的坑:单元格子类的父类选错了
你提到“为集合视图控制器内的单元格创建了名为CollectionViewController的子类”——这里很可能混淆了集合视图控制器和单元格的父类:
- 集合视图控制器的子类应该继承自
UICollectionViewController - 而单元格的子类必须继承自
UICollectionViewCell
如果你的单元格子类错用了UICollectionViewController作为父类,那无论怎么关联Label,都没法在collectionView(_:cellForItemAt:)方法里正确访问。
修正步骤:
- 打开你的单元格子类代码,把父类改成
UICollectionViewCell,建议顺便把类名改成更清晰的(比如CustomCollectionCell):class CustomCollectionCell: UICollectionViewCell { @IBOutlet weak var cellLabel: UILabel! // 你的Label关联属性 } - 回到Main.storyboard,选中单元格,在右侧Identity Inspector的
Class下拉框里,选择你刚修正的单元格子类(比如CustomCollectionCell)。
检查重用标识符是否匹配
如果单元格父类是对的,那大概率是重用标识符不匹配导致dequeue出来的不是你的自定义单元格:
- 在storyboard里选中单元格,在Attributes Inspector的
Reuse Identifier栏填写一个唯一名称(比如CustomCellID) - 在
collectionView(_:cellForItemAt:)方法里,必须用同一个标识符,并且强制向下转为你的自定义单元格子类:override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { // 这里一定要转成自定义单元格类型,否则编译器识别不了你的Label属性 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CustomCellID", for: indexPath) as! CustomCollectionCell cell.cellLabel.text = "测试内容" return cell }
排查IBOutlet关联是否失效/错误
如果上面两步都没问题,那可能是Label的连线出了问题:
- 打开Xcode的Assistant Editor(点击右上角的双栏图标,让storyboard和代码并排显示)
- 右键点击storyboard里的Label,查看
Outlet列表:- 如果没有关联,重新拖拽Label到自定义单元格子类代码里生成正确的IBOutlet
- 如果关联指向的是集合视图控制器(而不是单元格子类),删掉旧连线,重新关联
按照上面的步骤排查,基本就能解决访问Label时的报错啦!
内容的提问来源于stack exchange,提问作者TmSmth
相关产品推荐
相关产品推荐

