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!
}
self.collectionView.registerClass(LeftMenuCollectionViewCell.self, forCellWithReuseIdentifier: "ls")
を再度呼び出しています。 ストーリーボードを使用している場合、これを呼び出したくない。ストーリーボードにあるものを上書きします。
それでも問題が解決しない場合は、reuseIdentifier
が同じ in dequeueReusableCellWithReuseIdentifier
and in storyboard
であるかどうかを確認してください。
この行を削除するだけです:
self.collectionView.registerClass(LeftMenuCollectionViewCell.self, forCellWithReuseIdentifier: "ls")
Xibを使用している場合は、viewdidloadにこのコード行を追加したことを確認してください。
目標C:
[self.collectionView registerNib:[UINib nibWithNibName:@"MyCell" bundle:nil] forCellWithReuseIdentifier:@"MyCellIdentifier"];
迅速:
collectionView.register(UINib(nibName:"MyCell", bundle: nil), forCellWithReuseIdentifier:"MyCellIdentifier")
そのペン先を登録する必要があります!
collectionView.register(UINib(nibName: "CustomCell", bundle: nil), forCellWithReuseIdentifier: "CustomCellId")
同様の問題がありましたが、私の間違いは、CollectionViewCellを委任してラベルテキストを変更できないことでした。
登録するには2つの方法があるように見えますが、最初は間違った方法を使用していました。 2番目のオプションで登録されたカスタムxibビューがあり、データがあります!
1:
collectionView?.register(YourItemClassName.self, forCellWithReuseIdentifier: "yourIdentifier")
2:
collectionView?.register(UINib(nibName: "YourItemClassName", bundle: nil), forCellWithReuseIdentifier: "yourIdentifier")