当应用程序进入后台时,如何在应用程序中全局隐藏UIAlertControllers

时间:2016-06-22 06:20:30

标签: ios objective-c background uialertcontroller

当我进入后台时,我需要一个系统来隐藏我应用中的所有UIAlertController。目前,我为BaseViewController所有注册为“输入背景”通知的UIViewControllers人使用了UIAlertViewController课程,并引用了BaseViewController。如果弹出窗口显示可见,则此UIViewController会隐藏弹出窗口。它有效,但不实用。

另一种方式是继承,但Apple医生说:

  

UIAlertController类旨在按原样使用,但不是   支持子类化。此类的视图层次结构是私有的   不得修改。

您是否有更好的解决方案,不涉及对包含UIAlertController的{​​{1}}进行子类化?

1 个答案:

答案 0 :(得分:2)

使用此代码,您需要获取顶视图控制器

使用此方法获取顶视图控制器

- (id)getTopViewController {

    UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;

    while (topController.presentedViewController) {
        topController = topController.presentedViewController;
    }
    if (![topController isKindOfClass:[NSNull class]]) {
        return topController;
    }
}


- (void)applicationDidEnterBackground:(NSNotification *)notification {

    UIViewController *viewOb = [self getTopViewController];

    // check  UIViewController is  UIAlertController
    if ([view isKindOfClass:[UIAlertController class]]) {
        NSLog(@"%@",view);
        [viewOb dismissViewControllerAnimated:YES completion:nil];
    }
}

然后用顶级viewController解析ViewController