如何检查一个特定的UIViewController视图当前是否可见?

可能重复:
如何判断UIViewController的视图是否可见

我正在开发一个应用程序,处理来自networking的传入数据的不断stream,并提供了许多不同的UIViews供用户查看该数据。

当某些模型数据根据来自networking的inputstream更新时,我访问关联的UIViewController或UITableViewController,并对其进行-setNeedsDisplay(对于UIViewController)或-reloadData(对于UITableViewController)。

有没有办法来检查给定的UIView是否正在显示(不只是被加载),以便我只做–setNeedsDisplay或 – 如果用户正在查看该UIView -reloadData? 看起来用户目前没有看到调用-setNeedsDisplay或reloadData是浪费处理能力,对电池寿命不利。 当用户最终切换到先前更新的视图时,在-viewWillAppear上执行-setNeedsDisplay或reloadData将更有意义。

谢谢

在做了一些研究后,我在这里发布了一个不同的问题,发现了这个答案…这似乎是最好的方法…

如果视图当前可见,视图的窗口属性是非零,所以检查视图控制器中的主视图:

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

将其添加到您的控制器或UIViewController的子类中,然后可以继续进一步子类化。 使用属性或variables访问它:

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

只是为了完整性,我想我会添加如何确定视图控制器是否显示在基于选项卡的应用程序中:

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