问题描述
遗留的 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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!