2010-08-31 3 views
1

J'ai un UIView dans un UIViewController auquel j'ajoute une sous-vue personnalisée dans la méthode viewDidAppear.Comment mettre à jour ou réinitialiser un UIView avec une sous-vue personnalisée?

MyView *myView = [[MyView alloc] initWithLabelText:text]; 
[self.view addSubview:myView]; 
[myView release]; 

La variable text est une chaîne utilisée sur une étiquette dans myView. Ce text change chaque fois que vous revenez à la vue actuelle. Mais il semble que viewDidAppear ne recharge pas la vue - il charge plutôt une nouvelle vue sur l'ancienne - donc j'ai deux étiquettes les unes sur les autres. J'ai essayé d'utiliser viewWillAppear mais cela ne fait aucune différence. J'ai également essayé d'utiliser [self.view setNeedsDisplay] - ne aide pas. J'ai également essayé de faire myView une variable d'instance, mais cela n'a pas aidé non plus.

Ce qui a été de supprimer le point de vue explicitement, quand je déclarais comme une variable d'instance:

- (void)viewDidDisappear:(BOOL)animated 
{ 
    [_myView removeFromSuperview]; 
} 

Bien qu'il y ait cette solution de contournement, je voudrais simplement revenir à la vue lors de l'obtention revenir. Est-ce que quelqu'un sait comment faire cela? J'apprécierais;)

Répondre

0

Ne pas allouer et init la sous-vue personnalisée à chaque fois, seulement la première fois viewDidAppear est appelée. Puis le conserver dans une propriété pour une utilisation ultérieure.

+0

Merci. Mais alors il doit encore être une variable d'instance, n'est-ce pas? – marikaner

+1

Pas nécessairement, mais une variable d'instance qui est aussi une propriété est un bon endroit, car cela aidera à gérer le nombre de retenues. (Et assurez-vous de ne pas "couvrir" votre variable d'instance avec une variable locale du même nom, ou utilisez une variable d'instance dans un autre objet par erreur.) – hotpaw2

0

La chose suivante peut être considérée. ViewDidLoad -> alloc et init vos sous-vues viewDidAppear -> mise à jour des sous-vues dealloc -> libère les sous-vues.

+0

Merci. Oui, c'est ce que j'ai fait. Mais ici aussi je dois utiliser des variables d'instance au lieu de variables locales. Je pensais qu'il devrait y avoir un moyen de "recharger" l'ensemble de la vue. – marikaner

Questions connexes