检查 UIView 是不是显示 UIAlertView

Posted

技术标签:

【中文标题】检查 UIView 是不是显示 UIAlertView【英文标题】:Check if UIView is displaying a UIAlertView检查 UIView 是否显示 UIAlertView 【发布时间】:2012-05-23 21:15:42 【问题描述】:

是否可以确定当前 UIView 是否显示 UIAlertView(除了每次创建 UIAlertView 时设置一个变量)。

我在想一些类似的事情

    if ([self.view.subviews containsObject:UIAlertView])  ... 

但这显然行不通。

【问题讨论】:

可能重复***.com/questions/2528929/… 类似,但接受的答案对我没有好处,因为我有这么多实例化,替代答案是使用未记录的方法......我想没有快速简便的方法跨度> 您只是想知道显示的警报还是您关心它的来源? 只想知道当前是否可见。或者至少已经显示了一个,因为一旦 iVar 被关闭,我就可以将其设置为 TRUE。我只是不想在显示警报的每个实例中都设置 iVar。 请问您要创建什么样的交互场景? 【参考方案1】:

这不适用于 iOS7 及更高版本。

[alertView Show] 我猜想在主窗口上添加子视图。

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");
        
    

【讨论】:

这最接近我想要达到的目标,所以我会给它答案,尽管由于某种原因它并没有真正起作用,因为我不确定 UIAlertView 是否仍然存在显示后的子视图,即使它仍然在屏幕上。 我试过这个,但由于某种原因它不起作用。但我在***.com/a/2529692/1091926 找到了另一个答案,它对我有用。代码看起来很相似。 (我猜是因为“if ([subviews count] > 0)”) 其实我相信它的工作原理是因为 [subviews objectAtIndex:0]【参考方案2】:

我认为它会起作用:

-(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

【讨论】:

虽然这在技术上可行,但如果显示非 UIAlertView 窗口,它可能会引入错误。【参考方案3】:

如果您将 UIAlertView 作为属性存储在显示它的视图控制器上,然后运行您的代码:

if ([self.view.subviews containsObject:self.myalertview])  ... 

应该可以的。

【讨论】:

谢谢 - 我试图避免自定义我显示的每个警报视图,因为它们有很多。

以上是关于检查 UIView 是不是显示 UIAlertView的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 UIView 是不是仍然存在?

如何检查 UITableViewCell 是不是包含 UIView

UIView 未以编程方式显示在 UIScrollView 中

如何检查多个 UIView 子视图相互重叠显示的贝塞尔路径内的触摸事件?

UIView 中的“BOOL 突出显示”属性而不是 UITableViewCell?

如何检查是不是从 Swift 的 XIB 文件中单击了按钮?