2012-08-13 15 views
19

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 

risposta

45

Nessuno dei tuoi IBOutlets viene impostato quando si ottiene il messaggio - è necessario utilizzare "awakeFromNib" o "viewDidLoad" - qualcosa di simile - per accedere ai tuoi punti vendita. Detto questo, puoi impostare altre cose non di uscita in initWithCoder.

+1

Oh, ok. Sostituire 'initWithCoder' con' awakeFromNib' sembra funzionare come previsto. Molte grazie! – Ryan

+0

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

+3

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. –

Problemi correlati