J'ai une sous-class de UITableViewCell
. Ma sous-class contient plusieurs UILabel
s. Je veux que ma sous-class initialise ces labels à certains parameters par défaut qui s'appliquent à toutes les cellules de ma table.
J'ai lu que je devrais utiliser initWithCoder
pour cela. Ma fonction initWithCoder
est appelée, et je peux parcourir chaque ligne dans ma fonction et il semble passer par les mouvements. Lorsque je lance mon application, je ne vois aucune des propriétés appliquées. Le plus notable est que la police n'est pas modifiée. Je ne pense pas que les propriétés que je suis en UILabel
modifier sur mes UILabel
soient en train d'être sauvegardées ou affichées.
J'utilise cette sous-class en conjonction avec un Storyboard
. Je sais que mes modifications ne seront pas reflétées sur le Storyboard
, mais elles ne sont pas reflétées lors de l'exécution de l'application – malgré l'exécution de mon code.
Edit: Je voulais mentionner qu'avant d'essayer de surcharger initWithCoder
, j'avais une méthode d'occurrence dans ces sous-classs dans laquelle initWithCoder
cette logique. J'appellerais simplement cette méthode d'instance à l'intérieur de cellForRowAtIndexPath
. Cette méthode fonctionnait, mais je pensais que ce serait pratique d'avoir cette logique dans cette sous-class se produire automatiquement.
Des idées? Mon code est ci-dessous:
#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
Et l'en-tête:
#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
Aucun de vos IBOutlets n'est défini lorsque vous recevez le message – vous devez utiliser "awakeFromNib" ou "viewDidLoad" – quelque chose comme ça – pour accéder à vos points de vente. Cela dit, vous pouvez définir d'autres choses non-sortie dans le initWithCoder.