如果已显示警报,则显示UIAlertController

fab*_*abb 7 ios8 uialertcontroller

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

编辑:目前我尝试显示警报,我不知道目前是否有任何提示.

你如何应对这种情况?

Bbx*_*Bbx 5

由于UIAlertController本身是 a ,因此您可以通过从现有的一个中呈现来在第一个之上UIViewController呈现第二个:UIAlertController

alertController.PresentViewController(alertController2,  animated: true, completionHandler: null)
Run Code Online (Sandbox Code Playgroud)


fab*_*abb 5

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

@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];
Run Code Online (Sandbox Code Playgroud)