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

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

我在想一些类似的事情

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

但这显然行不通。

【问题讨论】:

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

标签: objective-c ios uiview uialertview subview


【解决方案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 是否仍然存在显示后的子视图,即使它仍然在屏幕上。
  • 我试过这个,但由于某种原因它不起作用。但我在stackoverflow.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]) { ... }

应该可以的。

【讨论】:

  • 谢谢 - 我试图避免自定义我显示的每个警报视图,因为它们有很多。
猜你喜欢
  • 2011-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
相关资源
最近更新 更多