我在Interface Builder中创建了一个自定义UICollectionViewCell,将它绑定到类上,然后当我想使用并将字符串设置为字符串上的标签时,tha label的值为nil。
override func viewDidLoad() {
super.viewDidLoad()
// Register cell classes
self.collectionView.registerClass(LeftMenuCollectionViewCell.self, forCellWithReuseIdentifier: "ls")
}
override func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell! {
var cell: LeftMenuCollectionViewCell
cell = collectionView.dequeueReusableCellWithReuseIdentifier("ls", forIndexPath: indexPath) as LeftMenuCollectionViewCell
println(cell.label) // <- this is nil, why??
cell.label.text = "asd"
return cell
}
子类化细胞:
class LeftMenuCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var label: UILabel!
@IBOutlet weak var activityIndicatorView: UIActivityIndicatorView!
}
答案 0 :(得分:277)
我再次打电话给self.collectionView.registerClass(LeftMenuCollectionViewCell.self, forCellWithReuseIdentifier: "ls")
。 如果您使用的是故事板,则不要打电话给。它会覆盖故事板中的内容。
如果您仍然遇到问题,请reuseIdentifier
中的dequeueReusableCellWithReuseIdentifier
和 {<1}} 。
答案 1 :(得分:49)
只需删除此行:
self.collectionView.registerClass(LeftMenuCollectionViewCell.self, forCellWithReuseIdentifier: "ls")
答案 2 :(得分:42)
如果您使用的是xib,请确保已将此行代码添加到viewdidload中。
目标C:
[self.collectionView registerNib:[UINib nibWithNibName:@"MyCell" bundle:nil] forCellWithReuseIdentifier:@"MyCellIdentifier"];
斯威夫特:
collectionView.register(UINib(nibName:"MyCell", bundle: nil), forCellWithReuseIdentifier:"MyCellIdentifier")
答案 3 :(得分:13)
要注册nib家伙!
collectionView.register(UINib(nibName: "CustomCell", bundle: nil), forCellWithReuseIdentifier: "CustomCellId")
答案 4 :(得分:0)
我遇到了类似的问题,但我的错误是我没有委托CollectionViewCell来更改标签文字..
答案 5 :(得分:0)
好像有两种注册方式,而我第一种使用的是错误的方式。 我有一个自定义的xib视图,因此已向第二个选项注册,并且我们有数据!
1:
collectionView?.register(YourItemClassName.self, forCellWithReuseIdentifier: "yourIdentifier")
2:
collectionView?.register(UINib(nibName: "YourItemClassName", bundle: nil), forCellWithReuseIdentifier: "yourIdentifier")
答案 6 :(得分:0)
我认为最好的解决方案是直接从情节提要中使用添加CollectionView
的情况,否则,您需要从情节提要中的CollectionViewCell
中删除CollectionView
并在以下命令:
collectionView?.register(UINib(nibName:“ YourItemClassName”,捆绑包:nil),forCellWithReuseIdentifier:“ yourIdentifier”)
答案 7 :(得分:0)
您没有注册手机
fileprivate let yourIdentifier = ""yourIdentifier"
super.viewDidLoad() {
//这里需要注册单元格 collectionView?.register(NameOfYourClass.self,forCellWithReuseIdentifier:“ yourIdentifier”) }