2014-01-17 58 views
6

我可以在我的iOS應用程序的任何部分檢查是否有任何UIAlertView顯示嗎?我發現這個代碼我可以檢查是否有任何UIAlertView顯示嗎?

[NSClassFromString(@"_UIAlertManager") performSelector:@selector(topMostAlert)] 

但它是私人API,我的應用程序可能會被Apple拒絕。 有沒有合法的方法可以做到這一點?

+0

檢查這個問題:[鏈接](http://stackoverflow.com/q/10727957/2298998) –

+0

這是一個私人的API,但我的地方閱讀,使用performselector是確定與蘋果公司的靜態代碼分析。但是你需要雙重確定。 –

回答

7

對於設備不足的iOS 7: -

當作出UIAlertView的機構,[alertView Show]增加了主窗口上的子視圖。因此,要檢測UIAlertView,您只需檢查當前UIView的子視圖,即UIAlertView繼承自UIView

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

編輯: - 對於使用的iOS 7

Class UIAlertManager = objc_getClass("_UIAlertManager"); 
UIAlertView *Alert = [UIAlertManager performSelector:@selector(Alert)]; 

UIAlertView *Alert = [NSClassFromString(@"_UIAlertManager") performSelector:@selector(Alert)]; 

注設備: -如果您不能使用第三方的API那麼你唯一的選擇中iOS7實際上會跟蹤您的警報視圖。

+0

謝謝。蠻力,但它的工作。 – Padavan

+0

你試過了嗎?我剛剛嘗試,它不工作。始終「AlertView不可用」。 – Padavan

+0

它不適用於ios7設備。因爲在ios7設備中正在使用keywindow。 –

1

你可以這樣檢查。

-(BOOL) doesAlertViewExist { 
    for (UIWindow* window in [UIApplication sharedApplication].windows) { 
    NSArray* subviews = window.subviews; 
    if ([subviews count] > 0) { 

     BOOL alert = [[subviews objectAtIndex:0] isKindOfClass:[UIAlertView class]]; 
     BOOL action = [[subviews objectAtIndex:0] isKindOfClass:[UIActionSheet class]]; 

     if (alert || action) 
     return YES; 
    } 
    } 
    return NO; 
} 
+0

此解決方案不適用於iOS 7以上版本。是否有任何其他方式iOS 7以上? –

相關問題