La domanda è semplice: come si carica personalizzato UITableViewCell
dai file Xib? Ciò ti consente di utilizzare Interface Builder per progettare le tue celle. Apparentemente la risposta non è semplice a causa di problemi di gestione della memoria. Questo thread menziona il problema e suggerisce una soluzione, ma è pre-rilascio NDA e manca di codice. Ecco un lungo thread che discute il problema senza fornire una risposta definitiva.
Ecco un po 'di codice che ho usato:
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];
}
Per utilizzare questo codice, crea MyCell.m / .h, una nuova sottoclasse di UITableViewCell
e aggiungi IBOutlets
per i componenti che desideri. Quindi creare un nuovo file "Vuoto XIB". Apri il file Xib in IB, aggiungi un UITableViewCell
oggetto, imposta il suo identificatore su "MyCellIdentifier", imposta la sua classe su MyCell e aggiungi i tuoi componenti. Infine, collega il IBOutlets
ai componenti. Si noti che non abbiamo impostato il proprietario del file in IB.
Altri metodi raccomandano di impostare il proprietario del file e avvertono di perdite di memoria se Xib non viene caricato tramite una classe di fabbrica aggiuntiva. Ho testato quanto sopra in Strumenti / Perdite e non ho riscontrato perdite di memoria.
Quindi qual è il modo canonico per caricare celle da Xibs? Impostiamo il proprietario del file? Abbiamo bisogno di una fabbrica? In tal caso, com'è il codice della fabbrica? Se ci sono più soluzioni, chiariamo i pro e i contro di ciascuno di essi ...