web-dev-qa-db-ja.com

UICollectionViewCellのアウトレットがゼロになるのはなぜですか?

Interface BuilderでカスタムUICollectionViewCellを作成し、そのビューをクラスにバインドします。その後、文字列のラベルに文字列を使用して設定したい場合、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!
}
135
János

self.collectionView.registerClass(LeftMenuCollectionViewCell.self, forCellWithReuseIdentifier: "ls")を再度呼び出しています。 ストーリーボードを使用している場合、これを呼び出したくない。ストーリーボードにあるものを上書きします。

それでも問題が解決しない場合は、reuseIdentifier同じ in dequeueReusableCellWithReuseIdentifierand in storyboardであるかどうかを確認してください。

284
János

この行を削除するだけです:

self.collectionView.registerClass(LeftMenuCollectionViewCell.self, forCellWithReuseIdentifier: "ls")
51
能蟹仔

Xibを使用している場合は、viewdidloadにこのコード行を追加したことを確認してください。

目標C:

[self.collectionView registerNib:[UINib nibWithNibName:@"MyCell" bundle:nil] forCellWithReuseIdentifier:@"MyCellIdentifier"];

迅速:

collectionView.register(UINib(nibName:"MyCell", bundle: nil), forCellWithReuseIdentifier:"MyCellIdentifier")
43
Vineeth

そのペン先を登録する必要があります!

collectionView.register(UINib(nibName: "CustomCell", bundle: nil), forCellWithReuseIdentifier: "CustomCellId")
16
Michael

同様の問題がありましたが、私の間違いは、CollectionViewCellを委任してラベルテキストを変更できないことでした。

0
justRadojko

登録するには2つの方法があるように見えますが、最初は間違った方法を使用していました。 2番目のオプションで登録されたカスタムxibビューがあり、データがあります!

1:

collectionView?.register(YourItemClassName.self, forCellWithReuseIdentifier: "yourIdentifier") 

2:

collectionView?.register(UINib(nibName: "YourItemClassName", bundle: nil), forCellWithReuseIdentifier: "yourIdentifier")
0
Sergio