无论如何检查视图控制器的视图,子视图是否可见?
我检查了link 1,link 2和link 3。所有这些帖子都讨论了UIViewController的视图,并根据视图的window属性编写了条件。 但我想检查一个视图现在是否可见或被其他视图覆盖或隐藏,我不能用以下条件。
if (viewController.isViewLoaded && viewController.view.window) {
// viewController is visible
}
关于我如何做到这一点的任何帮助?感谢。
答案 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