2012-03-14 41 views
5

在我的应用程序需要,去除可见的任何警报窗口,当应用程序去background.But问题是,我不想将其关闭如何删除_UIAlertNormalizingOverlayWindow

[alert dismissWithClickedButtonIndex:0 animated:YES] 

因为它会触发clickedButtonAtIndex委托并调用一个方法。我不想在应用程序转到后台时避免这种情况。

我做到了,成功地使用下面的代码

for (UIWindow *window in [UIApplication sharedApplication].windows) { 
     for (UIView *view in [window subviews]) { 
      if ([view isKindOfClass:[UIAlertView class]]) { 
       [view removeFromSuperview]; 
      } 

     } 

从的窗口子视图去除alertView但问题是,_UIAlertNormalizingOverlayWindow仍然存在,它会阻止用户Interaction.I需要从我的窗口中删除_UIAlertNormalizingOverlayWindow。 请帮我做到这一点或请建议任何替代方案来实现解决方案。

回答

3

尽管这不是一个很干净的解决方案(假设伊娃BOOL _backgroundAlertFlag

- (void)applicationDidEnterBackground:(UIApplication *)application { 
    _backgroundAlertFlag = YES; 

    // find your UIAlertView as you are doing already 

    [alert dismissWithClickedButtonIndex:0 animated:NO]; 
    _backgroundAlertFlag = NO; 
} 

然后在您的UIAlertViewDelegate方法:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
    if(!_backgroundAlertFlag) 
    { 
     // handle alert processing normally here 
    } 
    // other wise ignore (just dismiss) 
} 
+0

谢谢alan.But我正在寻找一个通用的解决方案来解决这个问题 – Sree 2012-03-15 05:17:55

+0

我会说这是一个通用的解决方案,因为覆盖窗口是私人API,如果您想在App Store上发货,则无法触摸它。 – rickster 2012-12-01 05:41:16

0

据我已经能够告诉,也没办法删除UIWindows,你唯一能做的就是制作一个不同的窗口按键,并且可以看到它