我可以在iOS应用程序的任何部分检查是否有任何UIAlertView现在显示?我找到了这段代码
[NSClassFromString(@"_UIAlertManager") performSelector:@selector(topMostAlert)]
但它是私有API,我的应用可能被Apple拒绝。 有没有合法的方法可以做到这一点?
答案 0 :(得分: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中唯一真正的选项是实际跟踪您的提醒视图。
答案 1 :(得分: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;
}