Possible Duplicate:
How to tell if UIViewController's view is visible

我正在开发一个应用程序,它可以处理来自网络的源源不断的输入数据,并为用户提供许多不同的UIView来查看这些数据.

当某些模型数据根据来自网络的传入流进行更新时,我访问关联的UIViewController或UITableViewController,并在其上执行-setNeedsDisplay(对于UIViewController)或-reloadData(对于UITableViewController).

有没有办法判断给定的UIView当前是否正在显示(不仅仅是加载),这样,如果用户当前正在查看该UIView,我只能执行-setNeedsDisplay或-reloadData操作?调用-setNeedsDisplay或重载用户当前未查看的视图上的数据似乎是在浪费处理能力,对电池生命周期 没有好处.当用户最终切换到之前更新过的视图时,在-viewwillbeen上执行-setNeedsDisplay或重载数据将更有意义.

谢谢

推荐答案

在做了一些研究之后,我在这里发布的另一个问题中找到了这个答案...这似乎是最好的方式...

如果视图当前可见,则视图的窗口属性为非零,因此请判断视图控制器中的主视图:

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

Objective-c相关问答推荐

如何以编程方式获取iphone的IP地址

Objective c 判断文本字段是否为空

UIAlertController:supportedInterfaceOrientations 被递归调用

self.ivar 和 ivar 之间的区别?

ios10:viewDidLoad 框架宽度/高度未正确初始化

改变 RGB colored颜色 的色调

在 Xcode 中为无法识别的 Select 器创建断点

Objective-C 浮点舍入

以原子方式写入文件与不写入文件之间的区别

如何使用整数值作为键在 NSMutableDictionary 中设置值?

NSInternalInconsistencyException: '无效参数不满足: !stayUp || CLClientIsBackgroundable(内部->fClient)'

`-fembed-bitcode` 和 BITCODE_GENERATION_MODE 有什么区别?

有没有一种简单的方法可以将 ISO8601 时间戳转换为格式化的 NSDate?

参考代码中的内部版本号或版本号

CF 对象与 NS 对象

iOS 7 状态栏与 NavigationBar 冲突

对块进行类型定义是如何工作的

UITabBar 未在 ios 7 中显示所选项目图像

如何更改标签栏上的非活动图标/文本 colored颜色 ?

xcode 5.1 中的 Arm64 架构