如何检测UIAlertView当前是否显示

tou*_*bun 0 objective-c uialertview ios uialertcontroller

有没有办法判断目前是否有UIAlertView实例显示?因为可以UIAlertView在同一窗口级别显示多个.

if ([self isAlertViewShowing]) {
    // do not show UIAlertView again.
} else {
    // show your UIAlertView.
}
Run Code Online (Sandbox Code Playgroud)

希望有一种叫做isAlertViewShowing或其他的方法.

Vin*_*ary 7

方法1- 初始化警报的默认标志...如果警报未打开,则将isAlertViewShowing设置为NO

    Bool isAlertViewShowing;
    isAlertViewShowing = NO;
    if (isAlertViewShowing == NO){
         UIAlertView *alert =[[UIAlertView alloc]initWithTitle:@"Title" message:@"Message" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
         [alert show];
         // Now set isAlertViewShowing to YES
         isAlertViewShowing = YES;
    }
    else
    {
         //Do something
    }
Run Code Online (Sandbox Code Playgroud)

方法2-创建 自己的函数以检查是否有任何UIAlertView显示

- (BOOL)isAlertViewShowing{
for (UIWindow* window in [UIApplication sharedApplication].windows) {
    NSArray* subviews = window.subviews;
    if ([subviews count] > 0){
        for (id view in subviews) {
            if ([view isKindOfClass:[UIAlertView class]]) {
                return YES;
            }
        }
    }
}
return NO;
}
Run Code Online (Sandbox Code Playgroud)

如果UIAlertView实例的数量可能多于一个,我建议使用第二种方法.