2010-08-09 7 views
1

Ok mon problème:créé par programme Accès à UILabel

Je fonction pour créer une étiquette:

- (void)crateBall:(NSInteger *)nummer { 
    UILabel *BallNummer = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 200, 100)]; 
    BallNummer.text = [NSString stringWithFormat:@"%i", nummer]; 
    [self.view addSubview:BallNummer]; 
} 

Maintenant, je veux accéder à l'étiquette dans une autre fonction pour modifier le texte, cadre ect. Le nombre de ces étiquettes est dynamique, donc je ne veux pas les déclarer dans le fichier .h. (i ne veux pas dire le nombre .text = 123 je veux dire le nombre d'étiquettes dans la vue)

Répondre

4

Toutes les sous-classes UIView ont entier tag propriété pour votre but

- (void)crateBall:(NSInteger *)nummer { 
    UILabel *BallNummer = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 200, 100)]; 
    BallNummer.text = [NSString stringWithFormat:@"%i", nummer]; 
    BallNummer.tag = *nummer; 
    [self.view addSubview:BallNummer]; 
    [BallNummer release]; 
} 

Plus tard, vous pouvez obtenir ce label en utilisant -viewWithTag: Fonction:

UILabel *ballNummer = (UILabel*)[self.view viewWithTag:nummer]; 

PS que vous passez le pointeur int à votre fonction (avez-vous vraiment besoin de le faire?), vous devez déréférencer avant d'utiliser sa valeur:

BallNummer.text = [NSString stringWithFormat:@"%i", *nummer]; 

P.P.S. N'oubliez pas de libérer l'étiquette votre créer (j'ai ajouté la version à mon code) - votre code fuit la mémoire

+0

Merci, une faute de frappe) – Vladimir

+0

Merci beaucoup cela fonctionne très bien: D – Mario

0

Vous pouvez utiliser la propriété '0' pour étiqueter vos sous-vues, et créer une seule fonction pour accéder à l'étiquette que vous êtes après

- (void)createLabels { 
    UILabel *label; 

    label = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 200, 100)]; 
    label.tag = 1; 
    [self.view addSubview:label]; 

    label = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 200, 100)]; 
    label.tag = 2; 
    [self.view addSubview:label]; 

    //etc... 
} 

-(UILabel*) getLabel:(NSInteger) index { 
    return [self.view viewWithTag:index]; 
} 
Questions connexes