Die Frage ist einfach: Wie lädt man benutzerdefinierte UITableViewCell
aus Xib-Dateien? Auf diese Weise können Sie Interface Builder zum Entwerfen Ihrer Zellen verwenden. Die Antwort ist anscheinend aufgrund von Speicherverwaltungsproblemen nicht einfach. Dieser Thread erwähnt das Problem und schlägt eine Lösung vor, ist jedoch vor der NDA-Veröffentlichung und enthält keinen Code. Hier ist ein langer Thread , der das Problem behandelt, ohne eine endgültige Antwort zu geben.
Hier ist ein Code, den ich verwendet habe:
static NSString *CellIdentifier = @"MyCellIdentifier";
MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
cell = (MyCell *)[nib objectAtIndex:0];
}
Um diesen Code zu verwenden, erstellen Sie MyCell.m / .h, eine neue Unterklasse von UITableViewCell
und fügen Sie sie IBOutlets
für die gewünschten Komponenten hinzu. Erstellen Sie dann eine neue "Leere XIB" -Datei. Öffnen Sie die Xib-Datei in IB, fügen Sie ein UITableViewCell
Objekt hinzu, setzen Sie den Bezeichner auf "MyCellIdentifier", setzen Sie die Klasse auf MyCell und fügen Sie Ihre Komponenten hinzu. Schließen Sie zum Schluss die IBOutlets
an die Komponenten an. Beachten Sie, dass wir den Eigentümer der Datei nicht in IB festgelegt haben.
Andere Methoden empfehlen, den Eigentümer der Datei festzulegen und vor Speicherverlusten zu warnen, wenn die Xib nicht über eine zusätzliche Factory-Klasse geladen wird. Ich habe das Obige unter Instrumente / Lecks getestet und keine Speicherlecks festgestellt.
Wie kann man also kanonisch Zellen aus Xibs laden? Stellen wir den Eigentümer der Datei ein? Brauchen wir eine Fabrik? Wenn ja, wie sieht der Code für die Fabrik aus? Wenn es mehrere Lösungen gibt, lassen Sie uns die Vor- und Nachteile der einzelnen Lösungen klären ...