1

我使用此代码尝试在 iphone 上显示警报消息

 [[UIApplication sharedApplication].delegate.window.rootViewController presentViewController:alert animated:YES completion:nil];

它工作正常。

但是是否可以在另一个共享对话框的顶部显示警报消息,也使用 presentViewController 显示:

目前它在控制台中显示警告并且警报未显示,仅显示共享活动的弹出窗口?

我可以使用 UIAlertView 让它工作,但现在不推荐使用

4

1 回答 1

1

为了将来参考,最好将您收到的警告文本也包含在问题中。

我的猜测是:

警告:尝试在 <ViewController: 0x7fe674e02f50> 上呈现 <UIAlertController: 0x7fe676036000> 已经呈现 <UIActivityViewController: 0x7fe67580f800>

这基本上表明您不能使用已经呈现单独视图控制器的视图控制器来呈现另一个视图控制器。

您可以解决此问题的一种方法是爬上presentedViewControllers 以找到尚未呈现的视图控制器,然后从中呈现(在您的情况下,您只需要将一个presentedViewController 向上移动到您的UIActivityViewController)。

这是一个使用UIWindowScene获取 rootViewController (iOS 13+) 的示例,但对于使用 appDelegate 的窗口也应该基本相同:

- (IBAction)showShareSheetAndAlert:(id)sender {
    UIImage *homerImage = [UIImage imageNamed:@"Homer"];
    UIActivityViewController *shareSheet = [[UIActivityViewController alloc] initWithActivityItems:@[homerImage] applicationActivities:nil];
    [self presentViewController:shareSheet animated:YES completion:^{
        UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Test Alert" message:@"Here's a test alert on top of a share sheet" preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction *dismissAction = [UIAlertAction actionWithTitle:@"Dismiss" style:UIAlertActionStyleDefault handler:nil];
        [alert addAction:dismissAction];
        UIWindowScene *windowScene = (UIWindowScene *)[[[[UIApplication sharedApplication] connectedScenes] allObjects] firstObject];
        UIViewController *viewControllerToPresentOn = windowScene.windows.firstObject.rootViewController;
        // keep climbing the presented view controllers until we find the top one which isn't presenting
        while (viewControllerToPresentOn.presentedViewController != nil) {
            viewControllerToPresentOn = viewControllerToPresentOn.presentedViewController;
        }
        [viewControllerToPresentOn presentViewController:alert animated:YES completion:nil];
    }];
}

这将导致:

Share_Sheet_Alert_Example

于 2020-11-19T20:27:22.247 回答