当应用程序转到后台时,关闭警报和操作表,如控件

时间:2014-12-31 10:08:11

标签: ios objective-c iphone

如果我的应用移动到后台,我想关闭所有警报视图和操作表,如控件,所以我将此代码放在目标c

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    Class AVClass = [UIAlertView class];
    Class ASClass = [UIActionSheet class];
    for (UIView * subview in subviews){
        NSLog(@"the class is %@",[subview class]);
        if ([subview isKindOfClass:AVClass]){
            [(UIAlertView *)subview dismissWithClickedButtonIndex:[(UIAlertView *)subview cancelButtonIndex] animated:NO];
        } else if ([subview isKindOfClass:ASClass]){
            [(UIActionSheet *)subview dismissWithClickedButtonIndex:[(UIActionSheet *)subview cancelButtonIndex] animated:NO];
        } else {
            [self checkViews:subview.subviews];
        }
    }
 }

但没有任何反应我在ios 8中没有获得任何警报视图参考 请建议如何删除打开的警报视图。

1 个答案:

答案 0 :(得分:0)

您拥有的代码永远不可靠,因为它取决于Apple实施细节。相反,你应该做一些事情,比如每次显示警报时发送通知并有一些东西(可能是应用代理,虽然这不是理想的,更好的是应用委托所拥有的类)观察这些通知并持有弱引用到警报视图(设置为通知对象)。

现在,当应用程序转到后台时,您可以迭代弱引用列表并关闭每个视图。有关实施细节,请参阅this answer