我可以在我的iOS應用程序的任何部分檢查是否有任何UIAlertView顯示嗎?我發現這個代碼我可以檢查是否有任何UIAlertView顯示嗎?
[NSClassFromString(@"_UIAlertManager") performSelector:@selector(topMostAlert)]
但它是私人API,我的應用程序可能會被Apple拒絕。 有沒有合法的方法可以做到這一點?
我可以在我的iOS應用程序的任何部分檢查是否有任何UIAlertView顯示嗎?我發現這個代碼我可以檢查是否有任何UIAlertView顯示嗎?
[NSClassFromString(@"_UIAlertManager") performSelector:@selector(topMostAlert)]
但它是私人API,我的應用程序可能會被Apple拒絕。 有沒有合法的方法可以做到這一點?
對於設備不足的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實際上會跟蹤您的警報視圖。
你可以這樣檢查。
-(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;
}
此解決方案不適用於iOS 7以上版本。是否有任何其他方式iOS 7以上? –
檢查這個問題:[鏈接](http://stackoverflow.com/q/10727957/2298998) –
這是一個私人的API,但我的地方閱讀,使用performselector是確定與蘋果公司的靜態代碼分析。但是你需要雙重確定。 –