2010-10-19 4 views
1

Dans mon application, j'ai une sous-classe UIView personnalisée (appelons-la MyView) qui contient trois boutons et deux étiquettes. J'ajoute cette vue à un contrôleur de vue qui a aussi une vue de table (j'ajoute l'instance de MyView en bas). En raison des règles de logique métier, les étiquettes et un bouton sur trois sont masqués au début. Donc, je le fais dans viewDidLoad:Problème avec certains contrôles faisant partie d'un UIView

self.myView.label1.hidden = YES; 
self.myView.label2.hidden = YES; 
self.myView.button1.hidden = YES; 

qui fonctionne bien. Donc, ces trois sont cachés et les deux boutons restants sont visibles.

Maintenant, ce contrôleur de vue est également un délégué pour une autre classe. À un certain moment, un événement se produit dans cette autre classe qui appelle une méthode de notification dans mon contrôleur de vue.

Dans cette méthode de notification, je dois maintenant montrer les contrôles cachés. Donc, j'ai évidemment essayé ce qui suit:

self.myView.label1.hidden = NO; 
self.myView.label2.hidden = NO; 
self.myView.button1.hidden = NO; 

mais cela ne fonctionne pas, ils n'apparaissent pas.

Une idée de ce que je fais mal? Ai-je besoin de "repeindre" self.myView après cela pour que les contrôles deviennent visibles? Qu'est-ce que j'oublie ici?

Merci beaucoup d'avance!

Modifier

J'ai ajouté quelques NSLogs après leur mise en visibilité et les journaux montrent quelque chose comme ceci:

label1.hidden = 0
label2.hidden = 0
button1.hidden = 0

Donc selon les journaux, ils devraient être visibles.

Répondre

2

Ok, donc j'ai résolu le problème. Je me suis déplacé le code qui définit la visibilité des contrôles dans une autre méthode et j'appelle cette méthode comme ceci:

[self performSelectorOnMainThread:@selector(updateControls) withObject:nil waitUntilDone:NO]; 

Alors, que savez-vous, la méthode de notification a été appelé dans un autre thread (je ne savais pas ce , la bibliothèque que j'utilise n'est pas la mienne et il n'y a rien dans les docs à ce sujet).

Quoi qu'il en soit, c'est bien que ça fonctionne maintenant.

Merci à tous!

0

Avez-vous confirmé que votre méthode de notification est appelée? Vous ne devriez pas avoir besoin d'actualiser spécifiquement la vue, mais si vous êtes sûr que votre méthode est appelée, vous pouvez également essayer d'ajouter [self.myView setNeedsDisplay]; dans votre méthode de notification.

+0

Je peux confirmer que la méthode de notification est appelée et que j'appelle setNeedsDisplay après les avoir tous définis comme visibles, mais rien. –

Questions connexes