2010-01-31 9 views
2

J'ai View A, lorsque l'utilisateur clique sur un bouton, j'ouvre View B. Lorsque l'utilisateur rejette View B, et nous revenons à View AI aimerait rafraîchir une étiquette sur View A, mais y a-t-il un événement que je peux utiliser pour détecter que nous sommes retournés à View B? Je sais que ViewDidLoad ne se déclenche plus.Comment détecter un SubView a fermé?

Répondre

2

Je suis confus au sujet des vues dans votre question, mais vous pourriez regarder dans le NSNotificationCenter.

Dans ce cas, vous posterais un événement NSNotification lorsque l'utilisateur rejette Voir B.

Vues A et B peuvent s'inscrire au centre de notification pour écouter cette notification de licenciement, appelant un sélecteur (méthode) lorsque cette la notification est entendue.

Dans cette méthode, vous pouvez mettre à jour l'état d'un libellé ou effectuer toute opération nécessitant la mise à jour de l'état de l'application. De même, vous pouvez publier une notification lorsque la vue B est affichée et que d'autres classes peuvent être enregistrées pour ce type de notification.

Plus d'informations à propos de NSNotificationCenter est situé au Apple's documentation site.

+0

Intéressant, merci! Toutes mes excuses pour la confusion, je m'habitue toujours au jargon approprié. –

1

Vous semblez faire référence à UIViewControllers plutôt qu'à UIViews? Dans ce cas, vous pouvez utiliser -viewWillDisappear: (BOOL) animated et -viewDidDisappear: (BOOL) animé pour déterminer quand votre viewController est sur le point d'être/a été simplement ignoré. Ceux-ci devraient être implémentés sur View B dans votre exemple. Si vous voulez savoir quand View A est à nouveau visible, vous pouvez utiliser -viewWillAppear: et -viewDidAppear.

+0

Oui, UIViewControllers. Cependant, je trouve que ViewWillAppear et ViewDidAppear ne sont pas déclenchés sur View A lorsque la vue B est fermée (c'est-à-dire this.View.RemoveFromSuperview();). J'ai vérifié cela en plaçant des instructions Console.WriteLine dans ma vue A pour les deux gestionnaires d'événements, et ils ne se déclenchent que la première fois que la vue A apparaît. –

+0

C'est correct. pour obtenir ces derniers, vous devez utiliser un UINavigationController (ou UITabBarController) –

+0

Alors je suppose que le seul moyen est le NSNotificationCenter. Est-ce exact? Cela va-t-il permettre à View A de mettre à jour une étiquette sur elle-même après que View B a fait RemoveFromSuperview? Je suis préoccupé par le fait que la façon dont View A serait averti serait lorsque View A a l'étiquette instanciée. Un exemple de ceci est de passer une référence à View B de View A et de donner à View A une propriété pour accéder à une telle étiquette, si View B essaye de la mettre à jour, l'étiquette est null car l'étiquette de View A n'est pas instanciée. –