J'ai créé un UICollectionViewCell personnalisé dans Interface Builder, en liant des vues à la classe, puis, lorsque je souhaite utiliser et définir une chaîne sur l'étiquette de la chaîne, l'étiquette a une valeur nulle.
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
}
Et la cellule sous-classée:
class LeftMenuCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var label: UILabel!
@IBOutlet weak var activityIndicatorView: UIActivityIndicatorView!
}
J'appelle à nouveau self.collectionView.registerClass(LeftMenuCollectionViewCell.self, forCellWithReuseIdentifier: "ls")
. Si vous utilisez un storyboard, vous ne voulez pas appeler cela. Cela écrasera ce que vous avez dans votre story-board.
Si le problème persiste, vérifiez si reuseIdentifier
est identique dans dequeueReusableCellWithReuseIdentifier
et dans storyboard
.
Il suffit de supprimer cette ligne:
self.collectionView.registerClass(LeftMenuCollectionViewCell.self, forCellWithReuseIdentifier: "ls")
Si vous utilisez xib, assurez-vous d'avoir ajouté cette ligne de code à votre viewdidload.
Objectif c:
[self.collectionView registerNib:[UINib nibWithNibName:@"MyCell" bundle:nil] forCellWithReuseIdentifier:@"MyCellIdentifier"];
Rapide:
collectionView.register(UINib(nibName:"MyCell", bundle: nil), forCellWithReuseIdentifier:"MyCellIdentifier")
Je dois enregistrer cette pointe les gars!
collectionView.register(UINib(nibName: "CustomCell", bundle: nil), forCellWithReuseIdentifier: "CustomCellId")
J'ai eu un problème similaire, mais mon erreur est que je n'ai pas délégué CollectionViewCell pour pouvoir modifier le texte de l'étiquette.
On dirait qu'il y a deux façons de s'inscrire et que j'utilisais le mauvais le premier. J'ai une vue xib personnalisée, donc enregistrée avec la deuxième option, et nous avons des données!
1:
collectionView?.register(YourItemClassName.self, forCellWithReuseIdentifier: "yourIdentifier")
2:
collectionView?.register(UINib(nibName: "YourItemClassName", bundle: nil), forCellWithReuseIdentifier: "yourIdentifier")