2010-10-22 16 views
4

Sur l'iPhone, nous pouvons simplement utiliser (void) viewDidAppear:(BOOL)animated; pour effectuer des actions quand une vue devient le focus. Dans certains cas, nous avons une vue modale avec une autre vue modale et, sur l'iPhone, la fermeture de la vue modale la plus haute déclenchera viewDidAppear pour la vue modale inférieure.Comment savoir quand un UIView obtient le focus

Ce n'est pas le cas pour l'iPad, car la vue reste "visible" même si elle est derrière une autre vue modale. Est-il possible de dire à partir d'un UIViewController quand la vue elle-même devient la vue active?

Répondre

4

ne pouvez-vous utiliser juste au moment où la vue du contrôleur modal de vue disparaît? Lorsque le contrôleur de la vue modale reçoit le viewWill/DidDissapear, vous savez que la vue d'origine est à nouveau visible.

EDIT: dans le viewDidDissapear du viewcontroller ajouter cette modale:

[self.parentViewController viewDidAppear:animated]; 

Cela rendra la méthode viewDidAppear être appelé comme il est sur l'iPhone.

Vous n'avez pas besoin de mettre self.parentViewController du tout, comme cela est fait pour vous dans la méthode presentModalViewController (une utilisation pour afficher le contrôleur de vue modal)

+0

Le problème est que nous devions alors établir un lien entre les deux vues modales et dire à l'autre d'effectuer des actions lorsque, idéalement, nous aimerions que la première vue modale effectue des actions à chaque fois qu'elle devient active. – mjdth

+0

Sur le contrôleur de vue présenté de manière modale, remplacez la méthode animée ViewDidDissapear: et mettez '[self.parentViewController viewDidAppear: animé];'. Cela signifiera que ViewDidAppear du premier viewcontroller est envoyé/appelé lorsque le second contrôleur de vue modale disparaît et que le premier apparaît. Donc, vous devez simplement mettre toutes les actions que vous souhaitez exécuter avec le premier contrôleur de vue lorsqu'il devient actif dans ViewDidAppear comme vous le feriez normalement sur iphone. –

+0

Cela semble fonctionner. Nous sommes allés avec une méthode légèrement différente, mais j'aurais probablement fait cela avant si nous y pensions. – mjdth

1

essayez de vérifier la valeur de [theUIView isFirstResponder] il devrait être vrai pour la vue qui a le focus du clavier, etc.

+0

sonne comme une possibilité, mais ce n pas vraiment un événement qui déclenche. Nous aimerions répondre à la vue en devenant active plutôt qu'en vérifiant constamment si elle est active. – mjdth