2010-08-02 4 views
0

Je veux renouveler un sous-vue qui est créé comme ceci:Comment renouveler vos sous-vues?

CGRect keyLabelRect = CGRectMake(2, [heightofrow intValue]*i, [breitescroller2 intValue]-2,[heightofrow intValue]); 
UILabel *keyLabel = [[UILabel alloc] initWithFrame:keyLabelRect]; 
[Inhalt1 addSubview: keyLabel]; 
[keyLabel release]; 

En appelant une méthode, « breitescroller2 » a une nouvelle valeur et ce terme est appelé une deuxième fois et une troisième fois et ainsi de suite. Mon problème est, que le "vieux UILabel" avec l'ancienne position reste à la vue, mais je veux le remplacer par la nouvelle position. Y a-t-il une méthode simple? en supprimant toute sous-vue (keylabel removeFromSuperView] la plus récente de sont supprimées.

Merci pour l'aide!

Répondre

0

Je suis sûr que vous devez d'abord supprimer l'ancienne étiquette via removeFromSuperview.

+0

J'ai changé mes méthodes en supprimant "UILabel * keyLabel" et maintenant je crée l'étiquette dans l'en-tête, maintenant je peux utiliser "removeFromSuperview", thx. – Jonathan

3

Si vous Est-ce que ça ne serait pas plus logique de simplement modifier les propriétés de l'UILabel existant et de ne pas en créer une nouvelle à chaque fois? Il me semble que c'est ce que vous faites maintenant, surtout que vous voulez remplacer l'ancien avec le nouveau, est un peu inefficace sur le plan de la mémoire

Je ne suis qu'un début Cependant, en travaillant avec Cocoa et Obj-C, j'ai peut-être manqué quelque chose qui rend ma suggestion irréalisable.

+0

oui, vous avez raison, je vais changer mes méthodes pour optimiser les performances. – Jonathan

+0

Correct: Pourquoi continuer de le recréer? Ce n'est pas vraiment la mémoire qui pose problème, mais les frais généraux du processeur. Beaucoup plus efficace pour simplement changer le texte de l'étiquette. Sur un appareil mobile où les cycles du processeur (et, par extension, la puissance) sont importants, l'efficacité devrait être l'une de vos principales préoccupations. –

Questions connexes