如果已显示警报,则显示UIAlertController [英] Show UIAlertController if already showing an Alert

查看:76
本文介绍了如果已显示警报,则显示UIAlertController的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

遗留的 UIAlertView 与新的 UIAlertController 之间的区别在于后者需要呈现在特定的viewcontroller上使用 presentViewController:animated:completion:。这给我的用例带来了一个尴尬的问题:当第二个视图控制器出现时,如果已经有 UIAlertController 显示(例如评级对话框)(例如,由于网络连接失败)。我经历过,在这种情况下,第二个 UIAlertController 只是没有显示。

Difference between the legacy UIAlertView and the new UIAlertController is that the latter needs to be presented onto a specific viewcontroller with presentViewController:animated:completion:. This poses an awkward problem for my use case: what if there is already an UIAlertController showing (e.g. a rating dialog) when a second viewcontroller gets presented (e.g. an error dialog due to failed network connection). I have experienced that in this case the second UIAlertController just does not show.

编辑:目前我尝试为了显示警报,我不知道目前是否有任何呈现。

At the moment I try to show an alert, I do not know if there currently is anything presenting.

你如何应对这种情况?

推荐答案

我找到了一个解决方法,找出我可以提出警报的视图控制器。我还发布了这里的答案:

I found a workaround to find out which viewcontroller I can present the alert upon. I also posted the answer here:

@implementation UIViewController (visibleViewController)

- (UIViewController *)my_visibleViewController {

    if ([self isKindOfClass:[UINavigationController class]]) {
        // do not use method visibleViewController as the presentedViewController could beingDismissed
        return [[(UINavigationController *)self topViewController] my_visibleViewController];
    }

    if ([self isKindOfClass:[UITabBarController class]]) {
        return [[(UITabBarController *)self selectedViewController] my_visibleViewController];
    }

    if (self.presentedViewController == nil || self.presentedViewController.isBeingDismissed) {
        return self;
    }

    return [self.presentedViewController my_visibleViewController];
}

@end

// To show a UIAlertController, present on the following viewcontroller:
UIViewController *visibleViewController = [[UIApplication sharedApplication].delegate.window.rootViewController my_visibleViewController];

这篇关于如果已显示警报,则显示UIAlertController的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆