如果已在iphone中显示另一个uialertview,则不应显示警报视图

时间:2011-05-17 17:59:33

标签: iphone

在iPhone上,如何在显示UIAlertView之前检查是否已显示某些UIAlertView

2 个答案:

答案 0 :(得分:5)

这应该有效:

for( UIView* subview in [UIApplication sharedApplication].keyWindow.subviews ) {
    if( [subview isKindOfClass:[UIAlertView class]] ) {
        NSLog( @"Alert is showing" );
        break;
    }
}

请记住,如果Apple更改警报的显示方式,此实施可能会中断。

答案 1 :(得分:2)

我认为没有任何内置方法可以确定是否有任何警报显示。我过去处理这个问题的方法是跟踪我正在显示的警报视图,方法是将它们分配到以下属性:

UIAlertView *currentAlert;

当他们被解雇时,设置:

currentAlert = nil; 

然后你只需检查currentAlert == nil,然后再显示另一个。

显然,这种方法存在一些主要缺点,包括但不限于:

  • 它仅适用于您显示的警报,而不适用于系统警报
  • 您必须实施UIAlertViewDelegate
  • “currentAlert”属性需要包含所有viewControllers可以访问的内容,例如应用程序委托。

但这是我所知道的唯一方式。