IOS 判断当前UIViewController 是否正在显示

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

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

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


判断UIViewController是否正在显示


2014年4月18日 edsioon 经验总结


某些情况下,需判断当前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);
}

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

时间: 2024-12-25 10:26:55

IOS 判断当前UIViewController 是否正在显示的相关文章

iOS 判断View 是否是第一次显示

在实现某些需求的时候会有这样的情况,页面第一次加载显示的时候需要某些操作,而以后就不需要重复执行了, 一般这种处理都放在- (void)viewDidLoad或- (id)init因为一般这两个函数除了在第一次显示或初始化以后就不会走了. 如果反过来呢页面第一次加载显示的时候不需要某些操作,但是如果是非第一次就需要做些判断,这个时候就需要做一些处理. 我选择了用计数来控制通过-(void)viewDidAppear:(BOOL)animated来控制 做法就是全局一个int isfirst 在-

iOS判断当前控制器是否在显示

当点击一个cell或者按钮的事件,处理比较耗时,在异步线程中运行中,当子线程得到运行结果时可能不在当前控制器上了.此时我们需要取消子线程后边的事情. 此刻,当得到结果时需要判断是否在当前控制器上.判断方法如下: -(BOOL)isCurrentViewControllerVisible:(UIViewController *)viewController { return (viewController.isViewLoaded && viewController.view.window)

判断UIViewController是否正在显示

转自:http://edsioon.me/if-uiviewcontroller-is-display/ 某些情况下,需判断当前ViewController是否正在显示,比如后台网络请求报错,我们可能只希望在发起请求的页面弹窗提示用户,当用户已经跳转到其他界面,不做弹窗,减少对用户的干扰. 假如一个UIView对象当前正在显示,那么它的window属性肯定为非空值.虽然官方文档未说明UIView未显示时window属性的取值,但是经过简单的测试,大部分情况下UIView未显示时,window的值

iOS 9应用开发教程之显示编辑文本标签文本框

iOS 9应用开发教程之显示编辑文本标签文本框 ios9显示.编辑文本 在iOS,经常会看到一些文本的显示.文字就是这些不会说话的设备的嘴巴.通过这些文字,可以很清楚的指定这些设备要表达的信息.本节将主要讲解在iOS中,用来显示和编辑文本的三个视图:标签.文本框和文本视图. ios9只读文本——标签 标签视图是一个只读的文本视图,它用于在应用程序中为用户显示少量的信息,如图2.16所示.在此图中文字的显示使用的就是标签视图.标签视图一般使用UILabel类实现.   图2.16  美容相机 [示

iOS 判断是push还是present

iOS 判断是push还是present下面这种方法判断成功了  if (self.presentingViewController)   {      [weakSelf dismissViewControllerAnimated:YES completion:nil];    }    else {       [weakSelf.navigationController popViewControllerAnimated:YES];      }

iOS判断为空或者只为空格

本文转载至 :http://www.cnblogs.com/superhappy/archive/2012/11/08/2761403.html 经常有需求 要判断不能为空,后台老是鄙视不做非空判断的前端 ,木办法 只能写一个. 第一种想法:我不就是判断 是不是nil就可以了么.结果发现太天真,用户可以输入空格. 对于这种蛋疼的用户,只能采取蛋疼的方法: -(Bool) isEmpty:(NSString *) str { if (!str) { return true; } else { //

iOS 判断字符串中含有某个字符串rangeOfString

//_roaldSearchText if([roadTitleLab.text rangeOfString:@"格力"].location !=NSNotFound) NSLog(@"yes"); else NSLog(@"no"); iOS 判断字符串中含有某个字符串rangeOfString,布布扣,bubuko.com

IOS UIView(UIButton)通过显示动画移动的时候 响应点击的解决方案

今天在做一个UIButton显示动画的时候,遇到一个问题,就是在移动的时候 ,需要相应它的点击时间(click) 通过CAKeyframeAnimation 来移动UIButton的layer ,效果可以,但是就是无法点击. 解决方法: 将UIButton 的  userinterfaceenable 设置为NO 为UIButton的父view添加tap点击事件 点击事件实现如下 -(void)viewClicked:(UITapGestureRecognizer*)gesture { CGPo

ios 判断字符串为空和只为空格解决办法

ios 判断字符串为空和只为空格解决办法- (BOOL)isBlankString:(NSString *)string{ if (string == nil) { return YES; } if (string == NULL) { return YES; } if ([string isKindOfClass:[NSNull class]]) { return YES; } if ([[string stringByTrimmingCharactersInSet:[NSCharacterS