我需要检测前面的哪个视图(当前可见)。我怎么能这样做?
这是我想做的事情:
if ( ! <<methodToTellIfViewAIsInFront>>) {
[viewA prepareToDisplay];
[window bringSubviewToFront: viewA];
}
答案 0 :(得分:13)
UIView并不一定有一个在前面的概念。 UIWindows可以是关键还是不关键,但它不是一回事。
您可以在前面带一个视图,但这并不意味着它可见或不可见。请记住,视图可以是任何大小。
深埋在层次结构中的UIView可能是部分可见的,可能是模糊的,也可能是一些半透明的视图背后。同样,如果修改了不透明度值或隐藏标志,则前面的视图可能根本不可见。
我认为您要做的是检查您的superview或UIWindow的子视图NSArray并检查它。我不记得前面是哪一个,但它是第一个或最后一个对象。
使用画家的方法绘制子视图。视图按照从最远到最近的顺序绘制,最后绘制的对象是“前面”。
答案 1 :(得分:4)
如果viewA在前面,以下内容将返回YES:
[[viewA.superview.subviews lastObject] isEqual: viewA]
答案 2 :(得分:3)
将此添加到视图控制器:
- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; visible = YES; } - (void)viewWillDisappear:(BOOL)animated { visible = NO; [super viewWillDisappear:animated]; }
并检查'可见'ivar
答案 3 :(得分:3)
检查[UIView.window isKeyWindow] == YES
答案 4 :(得分:1)
Swift 4中@LucasChwe的答案
if viewA.superview?.subviews.last == viewA { 'viewA is visible to user'}
答案 5 :(得分:0)
唯一的方法是使用[UIView标签]为视图指定唯一标识符,然后使用[UIView viewWithTag]将其带到前面。
或者您可以使用标签搜索所需的视图并进行处理..
for (UIView *checkView in [self.view subviews] ) {
if ([checkView tag] == whatever) {
// Do Whatever you need to do
}
}
..然后把它带到前面。
干杯
答案 6 :(得分:-1)
在处理模态视图时,此代码在我的根视图控制器中与我一起工作:
if(self.view == [(MyAppDelegate *)[[UIApplication sharedApplication] delegate].window.subviews objectAtIndex:0]){ ...
// stuff here
}