Ho una sottoclasse di UITableViewCell
. La mia sottoclasse contiene diversi UILabel
s. Voglio che la mia sottoclasse inizializzi queste etichette con alcune impostazioni predefinite valide per ogni cella di visualizzazione tabella.Perché initWithCoder non sta inizializzando correttamente gli elementi?
Ho letto che dovrei usare initWithCoder
per questo. Viene chiamata la mia funzione initWithCoder
, e posso scorrere ogni riga della mia funzione e sembra passare attraverso i movimenti. Tuttavia, quando eseguo la mia applicazione, non vedo nessuna delle proprietà applicate. Più chiaramente, il carattere non viene modificato. Non penso che nessuna delle proprietà che sto modificando sui miei UILabel
vengano effettivamente salvate o visualizzate.
Sto utilizzando questa sottoclasse in combinazione con uno Storyboard
. So che le mie modifiche non si rifletteranno sullo Storyboard
, ma non si riflettono anche quando l'applicazione viene eseguita, nonostante il mio codice venga eseguito.
Edit:. Volevo dire che prima di tentare di ignorare initWithCoder
, ho avuto un metodo di istanza in queste sottoclassi che mi piacerebbe correre in questa logica vorrei solo chiamare quel metodo di istanza all'interno di cellForRowAtIndexPath
. Questo metodo funzionava, ma ho pensato che sarebbe stato utile avere questa logica in questa sottoclasse che si verificava automaticamente.
Qualche idea? Il mio codice è qui sotto:
#import "ThreadListCell.h"
@implementation ThreadListCell
- (id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
// adjust the font settings of the title
self.title.font = [UIFont fontWithName:@"SourceSansPro-Black" size:16];
self.title.textColor = [UIColor colorWithWhite:0.267f alpha:1.0f];
// adjust the font settings of the subtitle
self.text.font = [UIFont fontWithName:@"SourceSansPro-Light" size:14];
self.text.textColor = [UIColor colorWithWhite:0.267f alpha:0.9f];
self.text.textColor = [UIColor colorWithRed:1 green:0 blue:0 alpha:1];
// adjust the font settings of the location
self.location.font = [UIFont fontWithName:@"SourceSansPro-Light" size:8];
self.location.textColor = [UIColor colorWithWhite:0.267f alpha:0.9f];
// adjust the UILabel settings of the title
self.title.numberOfLines = 0;
self.title.lineBreakMode = UILineBreakModeTailTruncation;
// adjust the UILabel settings of the subtitle
self.text.numberOfLines = 0;
self.text.lineBreakMode = UILineBreakModeTailTruncation;
// adjust the UILabel settings of the location
self.location.numberOfLines = 0;
self.location.lineBreakMode = UILineBreakModeTailTruncation;
self.location.textAlignment = UITextAlignmentRight;
}
return self;
}
@end
e l'intestazione:
#import <UIKit/UIKit.h>
@interface ThreadListCell : UITableViewCell
@property (nonatomic, weak) IBOutlet UILabel *text;
@property (nonatomic, weak) IBOutlet UILabel *title;
@property (nonatomic, weak) IBOutlet UILabel *location;
@end
Oh, ok. Sostituire 'initWithCoder' con' awakeFromNib' sembra funzionare come previsto. Molte grazie! – Ryan
Anche se sembra che sia attivo 'awakeFromNib' prima di impostare una delle mie proprietà in' cellForRowAtIndexPath'. Questo mi fa pensare che forse il mio metodo di istanza era l'approccio migliore, perché potevo eseguire in modo affidabile le operazioni di ridimensionamento basate sul testo corrente in un 'UILabel', ecc. – Ryan
L'ordine dovrebbe essere: initWithCoder, awakeFromNib, cellForRowAtIndexPath. Se è necessario "preimpostare" alcuni valori matematici, è possibile farlo nella routine init. Ma non hai accesso ai tuoi punti vendita fino a quando il pennino non viene caricato. –