Fare in modo che un proprietario falso possa funzionare; tuttavia, una tale soluzione può essere fragile e inestensibile. In un certo senso, la cellula possiede se stessa, ma anche questo è tecnicamente scorretto. La verità è che UITableViewCell
s non hanno proprietari.
Il modo corretto di implementare celle di visualizzazione tabella personalizzate consiste nel creare innanzitutto una sottoclasse personalizzata di UITableViewCell.In questa classe verranno definiti tutti gli IBOutlet e così via per la cella. Ecco un esempio di un file di intestazione:
@interface RBPersonCell : UITableViewCell
@property (nonatomic, strong) IBOutlet UILabel * nameLabel;
@property (nonatomic, strong) IBOutlet UILabel * ageLabel;
- (void)setupWithPerson:(Person *)person;
@end
Da lì, ho un metodo comodo che crea la cellula dal pennino, se necessario:
+ (id)cellForTableView:(UITableView *)tableView reuseIdentifier:(NSString *)reuseID fromNib:(UINib *)nib {
if (!reuseID)
reuseID = [self cellIdentifier];
id cell = [tableView dequeueReusableCellWithIdentifier:reuseID];
if (!cell) {
NSArray * nibObjects = [nib instantiateWithOwner:nil options:nil];
// Sanity check.
NSAssert2(([nibObjects count] > 0) &&
[[nibObjects objectAtIndex:0] isKindOfClass:[self class]],
@"Nib '%@' does not appear to contain a valid %@",
[self nibName], NSStringFromClass([self class]));
cell = [nibObjects objectAtIndex:0];
}
return cell;
}
Questo metodo racchiude tutto il codice di creazione quindi non devo mai vederlo o riscriverlo. Si presuppone che la cella personalizzata sia la prima vista radice nel pennino. Questa è un'ipotesi abbastanza sicura poiché si dovrebbe avere solo la cella personalizzata come una vista di root.
Con tutto questo codice, sei pronto per lavorare in Interface Builder. Per prima cosa è necessario impostare la classe personalizzata nell'ispezione identità. Quindi, non dimenticare di impostare l'identificativo della cella. Per comodità, è meglio usare il nome della classe personalizzata. Quando si trascinano le connessioni, anziché trascinarle in Proprietario del file, trascinare le connessioni nella cella personalizzata stessa.
La maggior parte di ciò che ho appreso sulle celle di visualizzazione tabella personalizzate viene dalle ricette iOS Recipes 15-16. Ecco uno free extract direttamente da The Pragmatic Bookshelf. Puoi controllare quel libro per maggiori dettagli.
EDIT:
ho finalmente ottenuto intorno ad aprire la mia classe di sourcing RBSmartTableViewCell
. Lo puoi trovare sul mio GitHub. Dovresti trovare questa classe più utile del codice direttamente da iOS Recipes, dato che la mia classe tratta tutte le celle allo stesso modo, indipendentemente dal fatto che siano costruite usando XIB, UIStoryboard o codice. Questo repository include anche esempi di lavoro.
Sidenote completo, puoi indicarmi una sorta di guida o un esempio di come stai facendo questo perché suona alla grande, attualmente devo scorrere un pennino per trovare la vista corretta da usare nelle mie celle personalizzate. Questo non è l'ideale E sembra che tu abbia un'ottima soluzione. –
Puoi approfondire "sembra solo permetterti di impostare il proprietario del file su una classe conosciuta, non su un id che implementa un protocollo?" Significa costruttore di interfacce? – rooftop
@rooftop yes, "it" si riferisce a Interface Builder in quel caso. Quando si modifica/configura l'oggetto proprietario del file, esiste un'opzione "Classe" che consente di selezionare la classe del proprietario del file. Quel box in IB non mi permette di inserire id come tipo, e mi chiedo se sia possibile. Grazie! –
thauburger