web-dev-qa-db-fra.com

Pourquoi la sortie UICollectionViewCell est-elle nulle?

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!
}
135
János

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 dequeueReusableCellWithReuseIdentifieret dans storyboard.

284
János

Il suffit de supprimer cette ligne:

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

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")
43
Vineeth

Je dois enregistrer cette pointe les gars!

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

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.

0
justRadojko

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")
0
Sergio