2010-07-17 6 views
0

Je suis en train de factoriser mon code et j'aimerais déplacer tout un tas d'UILabels dans une autre classe pour ranger un peu les choses. Il me manque un morceau de puzzle pour pouvoir le faire (ou peut-être que je suis juste fatigué lol) Quoi qu'il en soit, voici le code simplifié montrant mon problème. Merci d'avance à tous ceux qui aide :)Affichage par programme d'un UILabel d'une autre classe

@interface MyClass : UIView { 
    UILabel *classLabel; 
} 
@property (assign) UILabel *classLabel; 
@end 

@implementation MyClass 
@synthesize classLabel; 
- (id)initWithFrame:(CGRect)frame { 
    if ((self = [super initWithFrame:frame])) { 
    } 
return self; 
} 
- (void)dealloc {[super dealloc];} 
@end 

@interface LabelTestViewController : UIViewController { 
    MyClass *myClassInstance; 
    UILabel *myLabel; 
} 
@property (assign) UILabel *myLabel; 
@end 

@implementation LabelTestViewController 
@synthesize myLabel; 
- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    // this shows a label on the screen as expected 
    myLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 50, 20)]; 
    myLabel.text = @"Hello"; 
    [self.view addSubview:myLabel]; 
    [myLabel release]; 

    // this doesn't show anything on the scree 
    myClassInstance = [MyClass new]; 
    [myClassInstance drawRect:CGRectMake(10, 50, 50, 20)]; // I suspect I need to call a different method, just don't know which one. initWithFrame is what I used at the time of creation of the label in the previous working scenario. is there an equivalent? 
    myClassInstance.classLabel.text = @"Goodbye"; 
    [self.view addSubview:myClassInstance.classLabel]; 
} 
- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];} 
- (void)viewDidUnload {} 
- (void)dealloc {[super dealloc];} 
@end 

Répondre

0

Quelques choses:

1) Vous ne devriez jamais appeler directement drawRect. Appelez plutôt setNeedsDisplay ou setNeedsDisplayInRect. Voir le Cocoa Drawing Guide ou le UIView Class Reference pour plus d'informations.

2) Mais cela peut ne pas être la source de votre problème. De votre code, il est difficile de dire ce qui finit dans classLabel après que vous ayez fini de le configurer, mais je suppose que ce n'est pas ce dont vous avez besoin. En particulier, il a besoin d'un cadre. Je suggère de définir une variable CGRect à myClassLabel.frame et de voir ce que vous obtenez.

+0

Au point 2, je ne fais rien pour configurer l'étiquette dans MyClass sauf déclarer son existence. Je ne fais que mettre l'étiquette là parce que dans mon vrai code c'est l'endroit logique pour cela et cela rend mon code principal beaucoup moins gonflé (il y a des tas d'instances de classe liées à des étiquettes spécifiques). Si je veux ajouter myClassInstance.classLabel à self.view, je n'ai pas besoin d'ajouter d'abord la vue MyClass à la self.view, n'est-ce pas? Je vais essayer votre suggestion de variable CGRect. Je suis au courant du point 1 aussi, je viens de saisir les pailles à ce moment :) Merci pour votre réponse :) lol omg – Timbo

+0

comment Embarras tout ce que je devais été mis dans une myClassInstance.classLabel = [[UILabel alloc] initWithFrame: CGRectMake (0, 0, 40, 18)]; une fois que j'avais myClassInstance déjà déclaré – Timbo

Questions connexes