2015-08-27 71 views
1

无论如何检查视图控制器的视图,子视图是否可见或不正确?如何检查视图而不是viewController是否可见?

我检查了link 1link 2link 3。所有这些帖子讨论了关于UIViewController的视图,并根据视图的窗口属性编写了条件。 但我想检查视图是否现在可见或被其他视图覆盖或隐藏,这是我无法处理以下情况。

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

有关我该怎么做的任何帮助?谢谢。

+0

通常你(或你的代码)应该知道是什么做视图层次结构和那里是可见的或在前面。你能否解释为什么你需要找出答案,以便我们能够提出更好的方法? – vikingosegundo

+1

我的项目是一个完整的混乱,这是由以前的开发人员开始的购物车,现在在独轮车的形状,与法拉利风格的屋顶和发动机罩。所以不要问。情况是,视图控制器上的自定义视图上有一个imageView :)。我需要为imageView调用'bringSubviewToFront:'方法,并且只有在没有其他视图位于该自定义视图上时才调用另一个自定义方法。 – x4h1d

回答

3

一个UIView有一个superview属性和window财产。你可以检查看看是否是nil。如果视图有一个无超视图,那么它没有被添加到任何东西,并且不可见。

如果视图确实有一个不是nil的superview属性,那么您可以查看superview的subviews数组属性以确定视图堆栈(0位于后面)。

如果您的视图不在堆栈的前面,您需要查看其前面的其他视图的框架矩形以确定它们是否覆盖它。就个人而言,我会使用CGRectIntersection命令来测试。

一个UIView也有hidden属性,它可以检查以及一个alpha属性,它将使视图无形的,如果它被设置为0

+0

在我的情况下,'CGRectIntersection'似乎是一个好主意。 – x4h1d

0

您可以使用此代码获取视图的索引,并确定它是在前面还是不

UIView* view1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)]; 
NSLog(@"%d", [[self.view subviews] indexOfObject:view1]); // Is 1 
相关问题