2009-05-12 9 views
3

J'ai une vue que je dis de mettre à jour lorsque ses données changent. Mais parfois, les données changent lorsque la vue n'est pas visible. Alors, comment puis-je détecter que le viewcontroller est visible et accepte les événements? Je pourrais ajouter un booléen qui est changé en viewWillAppear et viewWillDisappear, mais il semble que il devrait y avoir un moyen de détecter l'état directement ...Comment puis-je savoir si mon viewcontroller est visible et accepte les événements?

Merci, Gary

Répondre

12

Réponse courte: Si vous utilisez un UINavigationController, vous pouvez l'utiliser visibleViewController pour que vous n'ayez pas à suivre une valeur booléenne distincte. Réponse longue: Généralement, lorsque je me vois appeler reloadData à l'intérieur de viewWillAppear, cela indique que mon View doit observer une partie supplémentaire de mon Model. Le problème avec reloadData est qu'il va recharger toute votre table. Souvent, vous n'avez vraiment besoin de mettre à jour qu'une petite partie de la table. Ma stratégie consiste normalement à mettre à jour uniquement ce dont j'ai besoin, même si une vue particulière est visible à ce moment-là. Je sais que c'est une réponse assez vague ... peut-être un exemple de code pourrait m'aider à être plus précis ...

+0

> Généralement quand je me trouve appelant reloadData à l'intérieur de > viewWillAppear, c'est une indication que mon View doit observer> une partie supplémentaire de mon modèle D'accord. –

+0

Yup, c'est ce que je cherchais. La ligne est: 'if (self.navigationController.visibleViewController! = Self) { ...}'. BTW, je l'ai utilisé dans un UIViewController dans un UITabBarController. – DrGary

1

si c'est un tableview que vous pouvez faire quelque chose comme:

[(UITableView *)[self view] reloadData]; 

dans viewWillAppear de viewController. Je ne suis pas sûr, c'est ce que vous demandez, mais de toute façon.

0

Vous pouvez probablement vérifier la propriété de la fenêtre de vue:

- (BOOL)isVisible 
{ 
    return view.window != NULL; 
} 

Mais je pense que le maintien d'une variable BOOL est mieux.

Questions connexes