Le réglage .reuseIdentifier sur un UICollectionViewCell
J'ai un particulier UICollectionViewCell
que je veux instancier moi-même, et ajouter dans une UICollectionView
. Pour que cela fonctionne, le UICollectionViewCell
instance besoins de ses .reuseIdentifier
propriété à définir.
Normalement, la classe ou de la Plume qui décrit la cellule est enregistré auprès de l'affichage de la collection, et l'affichage de la collection instancie la cellule avec son .reuseIdentifier
déjà, avec ces méthodes:
- registerClass:forCellWithReuseIdentifier:
- registerNib:forCellWithReuseIdentifier:
Cependant, depuis que je suis la construction de cette cellule en dehors de la vue de collection, elles ne s'appliquent pas.
Quand j'ai créer la cellule de moi-même, il semble y avoir aucun moyen de définir son .reuseIdentifier
(parce que c'est une propriété en lecture seule, et il n'y a pas init...
méthodes que l'initialiser).
Quand .reuseIdentifier
n'est pas définie, la UICollectionView
déclenche une exception lorsque la cellule est ajoutée. Ce comportement est différent de UITableView
, où la réutilisation des identifiants étaient facultatives.
Une simple solution de contournement pour définir l'affichage de la collection de la cellule de réutilisation de l'identifiant est de les intégrer dans une .xib
fichier et utiliser la Identifier
boîte, puis de créer une instance de la cellule avec
[NSBundle.mainBundle loadNibNamed:@"MyCellName" owner:self options:nil][0];
Je peux ensuite passer au-dessus de la instancié UICollectionViewCell
et tout fonctionne bien.
...mais cela semble assez stupide et arbitraire cerceau à sauter à travers. Est-il un autre moyen d'obtenir cette propriété est définie sur la cellule instance sans l' .xib
-wrapper détour?
Mise à jour: la documentation d'Apple dit ceci:
Pour simplifier le processus de création de votre code, l'affichage de la collection exige que vous toujours à la résorption de points de vue, plutôt que de créer explicitement dans votre code.
...qui est en fait pas vrai, parce qu'il n'a pas besoin (c'est à dire, de l'extérieur instanciées cellules fonctionnent très bien aussi longtemps que leur identifiant est fixé en quelque sorte, par exemple si elle est chargée à partir d'un .xib
), et il n'a pas également de "simplifier le processus de création de mon code" dans mon cas d'utilisation particulier (plutôt nécessite un fichier supplémentaire; en outre, il serait embrouillée pour exiger que l'affichage de la collection créer ces quelques complexes one-offs).
Mais le ci-dessus ne semblent indiquer que la réponse à la question est non: c'est intentionnellement "difficile" pour créer les cellules utilisables, sauf par le fait d'avoir l'affichage de la collection dequeue.
Merci, c'est un bon truc à essayer. Je me demandais aussi si
setValue:forKey
"travaille autour de" la readonly
peu. 🙂OriginalL'auteur mjh | 2012-11-08
Vous devez vous connecter pour publier un commentaire.
L'utilisation de ces deux méthodes.
Voir apple UICollectionView De Référence De Classe
Vous souhaitez construire une UICollectionViewCell utiliser le code et ensuite l'utiliser à d'autres?
Correct, je veux appeler une sorte de
init
méthode sur unUICollectionViewCell
sous-classe, puis afficher cette instance spécifique en vue d'une collection.J'ai cherché et je pense que vous ne pouvez le charger à partir de un .xib fichier. Désolé à ce sujet.
Je pense qu'il y a peut-être des trucs que l'on peut utiliser pour définir la propriété directement; voir le premier commentaire sur la question. Mais à l'aide d'un
.xib
semble la manière la plus sûre.OriginalL'auteur sunkehappy
Je suis désolé de le dire, mais je pense que vous allez avoir à accepter le fait que UICollectionView est la seule marque Apple usine pour la production de UICollectionViewCells. Donc, si vous avez deux vues de la collection dans laquelle vous souhaitez afficher exactement la même objet, vous êtes hors de la chance!
La bonne nouvelle est que si vous avez deux de la collection dans laquelle vous souhaitez afficher une cellule qui semble exactement le même que dans les autres, alors vous pouvez accomplir votre tâche. C'est facile:
Pendant ce temps, dans n'importe quelle des classes propres à la UICollectionView cv1 et cv2
et
Et leurs sources de données peuvent regarder le même
Vous avez peut-être raison, mais plus tôt cette année, j'ai décidé d'aller avec Apple est recommandé après une longue expérimentation. Voir ma un peu liés à la Q& stackoverflow.com/q/15939234/1224741. Il a un peu liés à la citation d'un Apple ingénieur.
Pourriez-vous fourni les implémentations de refreshCellWithObject: méthode? Comment il pourrait actualisation de la Cellule avec reuseidentifier.
Cette méthode est quelque chose que vous mettre en œuvre pour remplir toutes les cellules de l'opinion en se basant sur l'objet donné.
OriginalL'auteur QED