为什么UICollectionViewCell的出口是零?

时间:2014-08-06 16:10:52

标签: ios swift interface-builder ios8 uicollectionviewcell

我在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!
}

8 个答案:

答案 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”) }