2012-05-23 54 views
4

是否可以确定当前UIView是否显示UIAlertView(除了每次创建UIAlertView时都设置一个变量)。检查UIView是否显示UIAlertView

我想沿着

if ([self.view.subviews containsObject:UIAlertView]) { ... } 

线的东西但是,这显然是行不通的。

+3

可能重复http://stackoverflow.com/questions/2528929/iphone-sdk-check-if-a-uialertview-正在显示 – Luke

+1

类似的,但接受的答案对我来说并不好,因为我有这么多的实例化,而另一种答案是使用无证方法...我想没有快速简单的方法 – Smikey

+0

你只是想知道警报显示或你在乎我在哪里t起源于? –

回答

16

这不适用于iOS7及以上版本。

[alertView展会]增加了对我猜主窗口子视图。

for (UIWindow* window in [UIApplication sharedApplication].windows){ 
    for (UIView *subView in [window subviews]){ 
     if ([subView isKindOfClass:[UIAlertView class]]) { 
      NSLog(@"has AlertView"); 
     }else { 
      NSLog(@"No AlertView"); 
     } 
    } 
} 

+0

这是最接近我想要实现的,所以我会给它答案,虽然由于某种原因它并没有真正的工作,因为我不确定UIAlertView在显示后仍保留在子视图中,即使它仍然在屏幕上。 – Smikey

+0

我试过这个,出于某种原因它不起作用。但是我在http://stackoverflow.com/a/2529692/1091926找到了另一个答案,它适用于我。代码看起来很相似。 (我猜是因为“if([subviews count]> 0)”) –

+0

其实我相信它的工作原因是[subviews objectAtIndex:0] –

1

如果存储的UIAlertView中作为视图控制器上的属性,正显示它,然后运行代码:

if ([self.view.subviews containsObject:self.myalertview]) { ... } 

这应该工作。

+0

谢谢 - 我试图避免必须自定义每个警报视图,因为它们中有很多都显示。 – Smikey

10

我认为它会工作:

-(BOOL) doesAlertViewExist 
{ 
    if ([[UIApplication sharedApplication].keyWindow isMemberOfClass:[UIWindow class]]) 
    { 
     return NO;//AlertView does not exist on current window 
    } 
    return YES;//AlertView exist on current window 
} 
+1

它适用于iOS8。它适用于iOS 7吗? – Ramis

+0

任何更新,如果这适用于iOS7? – Drakes

+0

虽然这在技术上会起作用,但如果显示非UIAlertView窗口,则可能会引入错误。 – Shoerob