我可以检查现在是不是显示任何 UIAlertView 吗? [复制]
Posted
技术标签:
【中文标题】我可以检查现在是不是显示任何 UIAlertView 吗? [复制]【英文标题】:Can i check if any UIAlertView displaying right now? [duplicate]我可以检查现在是否显示任何 UIAlertView 吗? [复制] 【发布时间】:2014-01-17 07:12:09 【问题描述】:我可以在我的 ios 应用程序的任何部分检查现在是否显示任何 UIAlertView 吗?我找到了这段代码
[NSClassFromString(@"_UIAlertManager") performSelector:@selector(topMostAlert)]
但它是私有 API,我的应用程序可能会被 Apple 拒绝。 有任何合法的方法可以做到这一点吗?
【问题讨论】:
检查这个问题:link 它是一个私有 API,但在某处我读到使用 performselector 与 Apple 的静态代码分析是可以的。但你需要加倍确定。 【参考方案1】:对于低于 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 中唯一真正的选择是实际跟踪您的警报视图。
【讨论】:
谢谢。蛮力,但它的工作。 你试过了吗?我现在试了,还是不行。始终“AlertView 不可用”。 它不适用于 ios7 设备。因为在 ios7 设备中使用了 keywindow。 这可行,但我认为您应该保留对警报视图的引用... 您编辑的答案指向使用问题中提出的私有 API。【参考方案2】:你可以这样检查。
-(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 以后还有其他方法吗?以上是关于我可以检查现在是不是显示任何 UIAlertView 吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
用于检查值是不是存在的 Excel 公式,否则不显示任何内容 - 也使用条件格式