是否可以在另一个共享对话框的顶部显示警报消息

Posted

技术标签:

【中文标题】是否可以在另一个共享对话框的顶部显示警报消息【英文标题】:is it possible to show the alert message on top of another sharing dialog 【发布时间】:2020-11-19 18:38:44 【问题描述】:

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

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

效果很好。

但是,也使用 presentViewController 显示:

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

我可以使用 UIAlertView 让它工作,但现在已弃用

【问题讨论】:

请发布控制台中显示的警告全文 【参考方案1】:

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

我的猜测是这样的:

警告:尝试在 上显示 ,它已经在显示

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

您可以解决此问题的一种方法是爬上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];
    ];

这将导致:

【讨论】:

以上是关于是否可以在另一个共享对话框的顶部显示警报消息的主要内容,如果未能解决你的问题,请参考以下文章

在 jQuery 弹出窗口或 MVC 4 的警报中显示错误消息

对话框会阻止其余代码执行吗?

通过单击通知下拉菜单中的选项卡打开(警报)对话框

ios facebook swift sdk 共享对话框永远不会返回成功

Qt编程 ——消息对话框(QMessageBox)的使用

从 parse.com 控制台接收推送时显示警报对话框而不是通知