Comment vérifier si une vue UIViewController spécifique est actuellement visible?

Duplication possible:
Comment savoir si la vue UIViewController est visible

Je développe une application qui traite un stream constant de données entrantes provenant du réseau et fournit plusieurs UIViews différentes pour que l’utilisateur puisse visualiser ces données.

Lorsque certaines données du modèle sont mises à jour en fonction du stream entrant du réseau, j’accède à UIViewController ou UITableViewController associé et y fait -setNeedsDisplay (dans le cas de UIViewController) ou -reloadData (dans le cas de UITableViewController).

Existe-t-il un moyen de vérifier si un UIView donné est actuellement affiché (au-delà du simple chargement) afin que je ne fasse que -setNeedsDisplay ou -reloadData si l’utilisateur recherche actuellement cet UIView? Il semblerait qu’appeler -setNeedsDisplay ou reloadData sur une vue que l’utilisateur ne regarde pas actuellement est une perte de puissance de traitement et ne serait pas bon pour la vie de la batterie. Lorsque l’utilisateur bascule finalement sur une vue précédemment mise à jour, il serait plus judicieux d’effectuer -setNeedsDisplay ou reloadData sur -viewWillAppear.

Merci

Après avoir fait des recherches, j’ai trouvé cette réponse dans une autre question postée ici … Cela semble être le meilleur moyen …

La propriété window de la vue n’est pas nulle si une vue est actuellement visible. Vérifiez donc la vue principale dans le contrôleur de vue:

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

Ajoutez ceci à vos contrôleurs ou à une sous-classe de UIViewController que vous pouvez ensuite sous-classer. Accédez à cette propriété 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]; } 

Juste pour être complet, je pensais append comment déterminer si le contrôleur de vue est affiché dans une application basée sur des tabs:

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