如何检查view,而不是viewController是否可见?

时间:2015-08-27 11:58:54

标签: ios objective-c uiview uiviewcontroller

无论如何检查视图控制器的视图,子视图是否可见?

我检查了link 1link 2link 3。所有这些帖子都讨论了UIViewController的视图,并根据视图的window属性编写了条件。 但我想检查一个视图现在是否可见或被其他视图覆盖或隐藏,我不能用以下条件。

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

关于我如何做到这一点的任何帮助?感谢。

2 个答案:

答案 0 :(得分:3)

UIView具有superview属性和window属性。您可以查看这些是nil。如果视图具有零超视图,则它尚未添加到任何内容并且不可见。

如果视图的superview属性不是nil,那么你可以查看superview的subviews数组属性来确定视图堆栈(0在后面)。

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

UIView还有一个hidden属性,您可以检查该属性以及alpha属性,如果该视图设置为0,则该视图将不可见。

答案 1 :(得分:0)

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

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