- Einstellung .reuseIdentifier auf eine UICollectionViewCell
Ich habe eine Besondere UICollectionViewCell
will ich instanziieren mich, und fügen Sie zu einem UICollectionView
. Um für diese zu arbeiten, die UICollectionViewCell
Instanz braucht seine .reuseIdentifier
Eigenschaft festgelegt werden.
Normalerweise die Klasse oder Nib beschreibt, dass die Zelle eingetragen, in der Ansicht Sammlung und der Sammlung Sicht erzeugt die Zelle mit Ihrem .reuseIdentifier
bereits festgelegt ist, mit diesen Methoden:
- registerClass:forCellWithReuseIdentifier:
- registerNib:forCellWithReuseIdentifier:
Jedoch, da ich mich für den Bau dieser Zelle außerhalb des collection view, diese nicht anzuwenden.
Wenn ich die Zelle selbst, es scheint kein Weg zu sein, um seine .reuseIdentifier
(weil es ein readonly-Eigenschaft, und es gibt keine init...
Methoden, die Initialisierung).
Wenn .reuseIdentifier
ist nicht festgelegt, die UICollectionView
wirft eine Ausnahme wenn die Zelle Hinzugefügt wird. Dieses Verhalten unterscheidet sich von UITableView
, in denen die Wiederverwendung von Bezeichnern waren optional.
Einen einfachen workaround, um die Sammlung anzuzeigen Zelle reuse-identifier ist die Einbettung in eine .xib
Datei und verwenden Sie die Identifier
box, dann erstellen Sie eine Instanz der Zelle mit
[NSBundle.mainBundle loadNibNamed:@"MyCellName" owner:self options:nil][0];
Ich kann dann passieren die oben instanziiert UICollectionViewCell
und alles funktioniert einwandfrei.
...aber das scheint wie eine ziemlich dumme und willkürliche-hoop-Reifen zu springen durch. Gibt es einen anderen Weg um diese Eigenschaft auf die Zelle, die Instanz, ohne die .xib
-wrapper Umweg?
Update: die Dokumentation von Apple, sagt:
Zur Vereinfachung des Erstellungsprozesses für den code, der Ansicht Sammlung erfordert, dass Sie immer dequeue Ansichten, anstatt erstellen Sie explizit in Ihrem code.
...das ist eigentlich nicht wahr, weil es nicht erfordern (D. H., von außen instanziert Zellen funktionieren so lange, wie Ihre Kennung gesetzt ist irgendwie, wenn z.B. geladen von einem .xib
), und es ist auch nicht "vereinfachen den Erstellungsprozess für meinen code" in meinem Anwendungsfall (vielmehr erfordert eine extra-Datei; weiter wäre es chaotisch zu verlangen, dass in der Ansicht Sammlung erstellen, diese paar komplexe one-offs).
Aber die oben scheint zu implizieren, dass die Antwort auf die Frage ist nicht: es ist absichtlich "schwer" zu schaffen, eine nutzbare Zelle außer durch die Auflistung anzeigen zu entfernen.
Danke, das ist ein guter trick, um zu versuchen. Ich wurde auch gefragt, ob
setValue:forKey
"arbeitet, um" die readonly
bit. 🙂InformationsquelleAutor mjh | 2012-11-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie diese beiden Methoden.
Finden Sie in den apple UICollectionView Klasse Referenz
Sie möchten bauen ein UICollectionViewCell code verwenden, und verwenden Sie dann an anderer Stelle?
Richtig ist, möchte ich nennen, irgendeine Art von
init
Methode auf eineUICollectionViewCell
Unterklasse und dann anzeigen, dass bestimmte Instanz in einer Sammlung anzuzeigen.Ich habe gesucht und ich denke, Sie können nur laden Sie es aus .xib-Datei. Tut mir Leid.
Ich glaube es gibt da ein paar tricks, die man anwenden kann, um die Eigenschaft direkt; siehe der erste Kommentar auf die Frage. Aber mit einem
.xib
scheint der sicherste Weg.InformationsquelleAutor sunkehappy
Tut mir Leid es zu sagen, aber ich denke, Sie gehen zu müssen, die Tatsache zu akzeptieren, dass UICollectionView ist der einzige Apple-Fabrik für die Herstellung von UICollectionViewCells. Also, wenn Sie zwei Sammlung sichten, in denen Sie wollen, um den exakt gleichen Objekt, sind Sie aus Glück heraus!
Die gute Nachricht ist, dass, wenn Sie haben zwei Sammlung-Ansicht, in der Sie anzeigen möchten, die eine Zelle, die sieht genau das gleiche wie in der anderen, dann können Sie erfüllen Ihre Aufgabe. Es ist ganz einfach:
Inzwischen, in welche Klassen besitzen die UICollectionView cv1-und cv2 -
und
Und Ihre Datenquellen können gleich Aussehen
Sie mag Recht haben, aber früher in diesem Jahr habe ich beschlossen zu gehen mit Apple ' s empfohlen, nach langen Experimentieren. Siehe meine irgendwie-Verwandte Q&A bei stackoverflow.com/q/15939234/1224741. Es hat eine etwas-bezogene Zitat aus einem Apple-Ingenieur.
Könnten Sie, sofern die Implementierungen von refreshCellWithObject: Methode? Wie könnte es aktualisieren Zelle mit reuseidentifier.
Diese Methode ist etwas, das Sie implementieren, um füllen Sie alle der Zelle Ansichten, basierend auf dem gegebenen Objekt.
InformationsquelleAutor QED