48 votes

Comment vérifier si la vue d'un UIViewController spécifique est actuellement visible ?

Duplicata possible :
Comment savoir si la vue de UIViewController est visible ?

Je suis en train de développer une application qui traite un flux constant de données entrantes en provenance du réseau et fournit un certain nombre de différentes UIViews pour que l'utilisateur puisse visualiser ces données.

Lorsque certaines données du modèle sont mises à jour sur la base du flux entrant du réseau, j'accède au UIViewController ou au UITableViewController associé et je lui applique la commande -setNeedsDisplay (dans le cas du UIViewController) ou -reloadData (dans le cas du UITableViewController).

Existe-t-il un moyen de vérifier si une UIView donnée est en cours d'affichage (et pas seulement en cours de chargement) afin de n'effectuer -setNeedsDisplay ou -reloadData que si l'utilisateur est en train de regarder cette UIView ? Il semblerait qu'appeler -setNeedsDisplay ou -reloadData sur une vue que l'utilisateur n'est pas en train de regarder soit un gaspillage de puissance de traitement et ne soit pas bon pour l'autonomie de la batterie. Lorsque l'utilisateur passe finalement à une vue qui a été mise à jour précédemment, il serait plus logique d'appeler -setNeedsDisplay ou reloadData sur la -viewWillAppear.

Gracias

135voto

Paul Points 1785

Après avoir fait quelques recherches, j'ai trouvé cette réponse dans une autre question postée ici... Cela semble être la meilleure façon...

La propriété window de la vue est non-nil si une vue est actuellement visible, donc vérifiez la vue principale dans le contrôleur de vue :

if (viewController.isViewLoaded && viewController.view.window){
    // viewController is visible
}

14voto

Peter DeWeese Points 10185

Ajoutez ceci à vos contrôleurs, ou à une sous-classe de UIViewController que vous pouvez ensuite sous-classer. Accédez-y en utilisant une propriété ou la variable :

- (void)viewDidAppear:(BOOL)animated
{
 [super viewDidAppear:animated];
 visible = YES;
}

- (void)viewWillDisappear:(BOOL)animated
{
 visible = NO;
 [super viewWillDisappear:animated];
}

-3voto

software evolved Points 2125

Juste pour être complet, j'ai pensé ajouter comment déterminer si le contrôleur de vue est affiché dans une application basée sur des onglets :

+(BOOL) isSelectedViewController:(UIViewController *)someVC;
{
    myAppDelegate   *appD = [[UIApplication sharedApplication] delegate];
    UIViewController *selectedVC = [appD.TabBarController selectedViewController];

    return selectedVC == someVC;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X