2012-05-23 79 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