Ich bin in der Lage, benutzerdefinierte UITableViewCells zu entwerfen und sie mit der im Thread unter http://forums.macrumors.com/showthread.php?t=545061 beschriebenen Technik einwandfrei zu laden . Mit dieser Methode können Sie die Zelle jedoch nicht mehr mit einem reuseIdentifier initiieren. Dies bedeutet, dass Sie bei jedem Aufruf ganz neue Instanzen jeder Zelle erstellen müssen. Hat jemand eine gute Möglichkeit gefunden, bestimmte Zelltypen für Wiederverwendungen zwischenzuspeichern, sie aber dennoch in Interface Builder zu entwerfen?
ios
iphone
uitableview
cocoa-touch
interface-builder
Greg Martin
quelle
quelle
return NSStringFromClass([self class]);
Da Sie die Zelle in Interface Builder erstellen, legen Sie dort einfach die Wiederverwendungskennung fest:
Wenn Sie Xcode 4 ausführen, überprüfen Sie die Registerkarte Attributinspektor:
(Bearbeiten: Nachdem Ihr XIB von XCode generiert wurde, enthält es eine leere UIView, aber wir benötigen eine UITableViewCell. Sie müssen also die UIView manuell entfernen und eine Tabellenansichtszelle einfügen. Natürlich zeigt IB keine UITableViewCell-Parameter für a an UIView.)
quelle
In iOS 5 gibt es dafür eine geeignete UITableView-Methode:
quelle
Ich kann mich nicht erinnern, wo ich diesen Code ursprünglich gefunden habe, aber er hat bisher für mich hervorragend funktioniert.
Beispiel für die Einrichtung des Interface Builder ...
quelle
Schauen Sie sich die Antwort an, die ich auf diese Frage gegeben habe:
Ist es möglich, NSCell-Unterklassen in Interface Builder zu entwerfen?
Es ist nicht nur möglich, eine UITableViewCell in IB zu entwerfen, es ist auch wünschenswert, da ansonsten die gesamte manuelle Verkabelung und Platzierung mehrerer Elemente sehr mühsam ist. Die Leistung ist in Ordnung, solange Sie darauf achten, dass alle Elemente nach Möglichkeit undurchsichtig sind. Die Wiederverwendungs-ID wird in IB für die Eigenschaften der UITableViewCell festgelegt. Anschließend verwenden Sie die übereinstimmende Wiederverwendungs-ID im Code, wenn Sie versuchen, die Warteschlange zu entfernen.
Ich habe auch von einigen Moderatoren auf der WWDC im letzten Jahr gehört, dass Sie in IB keine Tabellenansichtszellen erstellen sollten, aber es ist eine Menge Koje.
quelle
Ab iOS ca. 4.0 gibt es in den iOS-Dokumenten spezifische Anweisungen, mit denen dies superschnell funktioniert:
http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html#//apple_ref/doc/uid/TP40007451-CH7
Scrollen Sie nach unten zu der Stelle, an der es um die Unterklasse von UITableViewCell geht.
quelle
Hier ist eine weitere Option:
quelle
UITableViewCell
, um einen eindeutigen Wert für festzulegenreuseIdentifer
. Ich denke, das ist es, wonach die ursprüngliche Operation tatsächlich gesucht hat.Ich erstelle meine benutzerdefinierten Ansichtszellen auf ähnliche Weise - außer ich verbinde die Zelle über ein IBOutlet.
Der
[nib objectAt...]
Ansatz ist anfällig für Änderungen der Positionen von Elementen im Array.Der
UIViewController
Ansatz ist gut - habe es einfach versucht und es funktioniert gut genug.ABER...
In allen Fällen wird der
initWithStyle
Konstruktor NICHT aufgerufen, sodass keine Standardinitialisierung durchgeführt wird.Ich habe verschiedene Stellen über die Verwendung von
initWithCoder
oder gelesenawakeFromNib
, aber keine schlüssigen Beweise dafür, dass beides der richtige Weg ist.Abgesehen davon, dass
cellForRowAtIndexPath
ich explizit eine Initialisierungsmethode in der Methode aufrufe, habe ich noch keine Antwort darauf gefunden.quelle
Vor einiger Zeit habe ich unter blog.atebits.com einen großartigen Blog-Beitrag zu diesem Thema gefunden und seitdem die ABTableViewCell-Klasse von Loren Brichter verwendet, um alle meine UITableViewCells zu erstellen.
Sie erhalten ein einfaches Container-UIView, in das Sie alle Ihre Widgets einfügen können, und das Scrollen ist blitzschnell.
Hoffe das ist nützlich.
quelle
Diese Technik funktioniert auch und erfordert kein funky ivar in Ihrem View Controller für die Speicherverwaltung. Hier befindet sich die Zelle der benutzerdefinierten Tabellenansicht in einer xib mit dem Namen "CustomCell.xib".
quelle
Die Louis-Methode hat bei mir funktioniert. Dies ist der Code, mit dem ich die UITableViewCell aus der Feder erstelle:
quelle
quelle
Die gustavogb-Lösung funktioniert bei mir nicht. Ich habe Folgendes versucht:
Es scheint zu funktionieren. Die blogTableViewCell ist das IBOutlet für die Zelle und ChainesController ist der Eigentümer der Datei.
quelle
In den UITableView-Dokumenten zu
dequeueWithReuseIdentifier
folgenden Themen : "Eine Zeichenfolge, die das wiederverwendbare Zellenobjekt identifiziert. Standardmäßig ist der Bezeichner einer wiederverwendbaren Zelle der Klassenname. Sie können ihn jedoch in einen beliebigen Wert ändern."Das Überschreiben von -reuseIdentifer selbst ist riskant. Was passiert, wenn Sie zwei Unterklassen Ihrer Zellenunterklasse haben und beide in einer einzigen Tabellenansicht verwenden? Wenn sie den Aufruf der Wiederverwendungskennung an super senden, wird eine Zelle des falschen Typs aus der Warteschlange entfernt. Ich denke, Sie müssen die Methode reuseIdentifier überschreiben, aber eine ersetzte Kennung zurückgeben Zeichenfolge. Wenn eine nicht angegeben wurde, geben Sie die Klasse als Zeichenfolge zurück.
quelle
Für das, was es wert ist, habe ich einen iPhone-Ingenieur bei einem der iPhone Tech Talks danach gefragt. Seine Antwort war: "Ja, es ist möglich, mit IB Zellen zu erstellen. Aber nicht. Bitte nicht."
quelle
Ich habe die Anweisungen von Apple befolgt, die von Ben Mosher verlinkt wurden (danke!), Aber festgestellt, dass Apple einen wichtigen Punkt ausgelassen hat. Das Objekt, das sie in IB entwerfen, ist nur eine UITableViewCell, ebenso wie die Variable, die sie daraus laden. Wenn Sie es jedoch tatsächlich als benutzerdefinierte Unterklasse von UITableViewCell einrichten und die Codedateien für die Unterklasse schreiben, können Sie IBOutlet-Deklarationen und IBAction-Methoden in den Code schreiben und diese mit Ihren benutzerdefinierten Elementen in IB verbinden. Dann müssen Sie keine Ansichts-Tags verwenden, um auf diese Elemente zuzugreifen, und Sie können jede Art von verrückter Zelle erstellen, die Sie möchten. Es ist Cocoa Touch Himmel.
quelle