IOS 判断当前UIViewController 是否正在显示
我通常的做法是根据视图控制器的生命周期来判断,其是否是正在使用的状态.
举例 设一个实例布尔变量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);
}
我想区分一下 根据视图的生命周来判断 和 这个高大上的方法来比较 哪个比较实在呢?明天给答案
IOS 判断当前UIViewController 是否正在显示的更多相关文章
- iOS判断当前控制器是否正在显示
+(BOOL)isCurrentViewControllerVisible:(UIViewController *)viewController { return (viewController.is ...
- iOS 判断View 是否是第一次显示
在实现某些需求的时候会有这样的情况,页面第一次加载显示的时候需要某些操作,而以后就不需要重复执行了, 一般这种处理都放在- (void)viewDidLoad或- (id)init因为一般这两个函数除 ...
- iOS 9应用开发教程之显示编辑文本标签文本框
iOS 9应用开发教程之显示编辑文本标签文本框 ios9显示.编辑文本 在iOS,经常会看到一些文本的显示.文字就是这些不会说话的设备的嘴巴.通过这些文字,可以很清楚的指定这些设备要表达的信息.本节将 ...
- ios 判断用户是否开启权限---并跳转设置
ios 判断用户是否开启权限---并跳转设置 ios 判断用户是否开启权限---并跳转“系统设置” 1.判断 访问相册 或 相机 权限是否开启 2.检测是否开启定位 后面将持续更新 只有在应用请求过位 ...
- iOS 判断数组是否为空
有人说可以用([array count]==0 )来判断是否为空,都是坑,如果array为空的话,执行count就会直接报错,程序崩溃退出. 正确判断NSArray是否为空的方法:用 (!array) ...
- iOS 判断相机权限是否被限制,判断相机是否可以使用
判断相机权限是否被限制 需要导入 AVFoundation 类 [objc] view plain copy #import <AVFoundation/AVFoundation.h> ...
- 判断display为隐藏还是显示及获取css
<html lang="en"> <head> <title>判断display为隐藏还是显示及获取css</title> < ...
- IOS判断NSArray是否为空
场景描述:判断一个集合是否为空,如果不为空执行A,如果为空执行B Java实现方法 public void exec(){ List<String> list = this.getCont ...
- jquery判断滚动到某个div显示底部按钮
判读滚动某个div显示底部按钮 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta char ...
随机推荐
- 微信小程序 - 豆瓣同城
代码地址如下:http://www.demodashi.com/demo/12121.html 一.准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.com/ ...
- BF的真正意义
http://www.jianglb.com/2010/11/25/whatisbf.html一个小男孩对小女孩说:“我是你的BF.”女孩扬起童真的脸,问:“什么是BF?”男孩嘻嘻笑道:“是BestF ...
- [redis]redis概述
Redis是一个开源.支持网络.基于内存.可持久化的日志型.key-value键值对数据库.使用ANSI C编写.并提供多种语言的API. 它是远程字典server(remote dictionary ...
- CentOs yum源安装 nginx
1 更新源 [root@server ~]#rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.no ...
- Verilog 浮点数运算模块
算法中常常会到浮点数运算,而浮点数的处理常常是Verilog初学中常常遇到的问题.以下将就一个简单的例子说明Verilog中浮点数运算处理. 在JPEG图像压缩时遇到色彩空间变换的问题,将YCbCr转 ...
- 使用OSChina代码托管管理项目(四)
本篇主要介绍使用Eclipse的Egit插件克隆远程project到本地的操作步骤 一.在Git资源库管理视图中新建一个远程资源库位置 点击红框中button进行加入 二.输入远程资源库相关信息.选择 ...
- vi编辑器命令大全
>> from zhuhaiqing.info
- 跟我一起写 Makefile(二)[转]
原文链接 http://bbs.chinaunix.net/thread-408225-1-1.html(出处: http://bbs.chinaunix.net/) 一.Makefile里有什么? ...
- iOS Masonry 抗压缩 抗拉伸
约束优先级: 在Autolayout中每个约束都有一个优先级, 优先级的范围是1 ~ 1000.创建一个约束,默认的优先级是最高的1000 Content Hugging Priority: 该优先级 ...
- 解密SVM系列(二):SVM的理论基础(转载)
解密SVM系列(二):SVM的理论基础 原文博主讲解地太好了 收藏下 解密SVM系列(三):SMO算法原理与实战求解 支持向量机通俗导论(理解SVM的三层境界) 上节我们探讨了关于拉格朗日乘 ...