我通常的做法是根据视图控制器的生命周期来判断,其是否是正在使用的状态.

举例 设一个实例布尔变量isVisible  在 -ViewWillAppear 里面 isVisible = YES ;  在-ViewWillDisappear 里面 isVisible = NO;   然后根据条件需要实施方法

最近同事分享一个巧妙方法如下:http://edsioon.me/if-uiviewcontroller-is-display/


判断UIViewController是否正在显示




某些情况下,需判断当前ViewController是否正在显示,比如后台网络请求报错,我们可能只希望在发起请求的页面弹窗提示用户,当用户已经跳转到其他界面,不做弹窗,减少对用户的干扰。

假如一个UIView对象当前正在显示,那么它的window属性肯定为非空值。虽然官方文档未说明UIView未显示时window属性的取值,但是经过简单的测试,大部分情况下UIView未显示时,window的值为空,因此依据此判断当前UIViewController是否正在显示。但是访问UIViewController的view属性时,可能会引起view加载(假如此时还未加载),这是不必要的,而且还可能引起无法预期的问题。因此在访问view属性之前,最好先检查isViewLoaded属性来避免上述问题。

示例代码如下,在UIViewController的扩展中声明了一个isVisible方法,方便以后调用

注意:UIView的官方文档中仅注明当view还未添加到window时,window属性为空;但是并未提及当window为nil时,当前view未显示。通过简单的Demo检测上文的方法可满足大部分需求,因此使用时建议进行简单测试!

瞬间觉得自己好low 哈哈 ,但是要注意 该方法实用的条件哦!!!  不是特殊情况处理下的视图控制器,一般都能用.

我写了一个类方法 为了调用更方便哈哈

如下:

+(BOOL)isCurrentViewControllerVisible:(UIViewController *)viewController
{
return (viewController.isViewLoaded && viewController.view.window);
}

我想区分一下 根据视图的生命周来判断 和 这个高大上的方法来比较 哪个比较实在呢?明天给答案

最新文章

  1. NGUI 新手引导
  2. SAP Java Connector(JCo)
  3. 百度云推送 pem
  4. String Format for DateTime [C#]
  5. CPU核心数
  6. Kafka0.10.2.0分布式集群安装
  7. java 解决时间相减问题
  8. CSS核心内容之盒子模型
  9. java网络编程(1)
  10. Spring Aop中,获取被代理类的工具
  11. docker简单介绍----Dockerfile命令
  12. django2.2/mysql ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3
  13. TensorFlow at Google I/O 2018
  14. Angular 2基础(一) 环境搭建
  15. Layui_1.0.9_分页实例_Java
  16. Asp.NetMVC和WebForm的请求生命周期
  17. LeetCode 669 Trim a Binary Search Tree 解题报告
  18. JsonDataObjects基本演示
  19. .netcore使用vscode多项目调试
  20. DevExpress 使用条形码二维码控件打印

热门文章

  1. LeetCode题目:Generate Parentheses
  2. 网络设备 | Cisco设备镜像文件损坏无法启动处理(tftp + rommon模式)
  3. spring 源码下载
  4. jm解决乱码问题-参数化-数据库操作-文件上传下载
  5. Doker容器之间连接
  6. asp.net core mvc视频A:笔记2-3.高级数据绑定
  7. IBM Rational Appscan使用之扫描结果分析
  8. CNN 防止过拟合的方法
  9. macOS10.12部署sonarqube5.6.3
  10. java中高级写法